pandas 学习

···

python

Pandas包含两个主要的数据结构:Series和DataFrame

DataFrame是一个表格型的数据结构

 

读取excel表格

pandas.read_excel(
io,
sheet_name=0,
或者sheet=''

header=0, header=None表示没有表头,用数字

names=None,names=['Birthdate','Name']定义列标签,需要配置header=None,不然会吃掉第一行数据

index_col=None,
usecols=None,
squeeze=False,
dtype=None,
engine=None,
converters=None,
true_values=None,
false_values=None,
skiprows=None,
nrows=None,
na_values=None,
keep_default_na=True,
verbose=False,
parse_dates=False,
date_parser=None,
thousands=None,
comment=None,
skipfooter=0,
convert_float=True,
mangle_dupe_cols=True,
**kwds)

来自 <最新Pandas.read_excel()全参数详解(案例实操,如何利用python导入excel) - 知乎>

创建一个dataframe:key变成列标签,value变成数据

date={'A':['x','y','z'],'B':[1000,2000,3000],'C':[10,20,30]}

import pandas as pd

df=pd.DataFrame(date)

df

 

   A     B   C

0  x  1000  10

1  y  2000  20

2  z  3000  30

数据

索引

列标签

df.values #查看数据

array([['x', 1000, 10],

       ['y', 2000, 20],

       ['z', 3000, 30]], dtype=object)

df.index #查看索引

RangeIndex(start=0, stop=3, step=1)

df.columns#查看列标签

Index(['A', 'B', 'C'], dtype='object')

df['A'] #基于列表签获取数据

0    x

1    y

2    z

Name: A, dtype: object

df['D']=20#基于列表签添加数据(填充所有行)

df

   A     B   C   D

0  x  1000  10  20

1  y  2000  20  20

2  z  3000  30  20

del df['D']#基于列标签删除数据

df

   A     B   C

0  x  1000  10

1  y  2000  20

2  z  3000  30

df=pd.concat([df,new_df])#合并两个dataframe,也可以添加一行

frames=[df,df]

df

   A     B   C

0  x  1000  10

1  y  2000  20

2  z  3000  30

new_df

     A     B    C

d  new  4000  100

df=pd.concat([df,new_df])

df

     A     B    C

0    x  1000   10

1    y  2000   20

2    z  3000   30

d  new  4000  100

-------另外一个例子

a=pd.DataFrame(['王小二','谢老大','木子李'])

b=pd.DataFrame(['李二狗','阿布都','崔花花'])

c=pd.concat([a,b])

c

     0

0  王小二

1  谢老大

2  木子李

0  李二狗

1  阿布都

2  崔花花

c[0]

0    王小二

1    谢老大

2    木子李

0    李二狗

1    阿布都

2    崔花花

Name: 0, dtype: object

c.loc[0]

     0

0  王小二

0  李二狗

df.loc['e']=['new2',5000,50]#添加一行数据

df

      A     B    C

0     x  1000   10

1     y  2000   20

2     z  3000   30

d   new  4000  100

e  new2  5000   50

df.loc[3]=['new3',6000,60]#添加一行数据

df

      A     B    C

0     x  1000   10

1     y  2000   20

2     z  3000   30

d   new  4000  100

e  new2  5000   50

3  new3  6000   60

d=a.join(b,how='outer')#添加一列数据(基于合并两个df)

a=pd.DataFrame(['王小二','谢老大','木子李'])

b=pd.DataFrame(['李二狗','阿布都','崔花花'],columns=[1])

d=a.join(b,how='outer')

d

     0    1

0  王小二  李二狗

1  谢老大  阿布都

2  木子李  崔花花

#如果b的列标签是0,d=a.join(b,how='outer')执行不下去

b=pd.DataFrame(['李二狗','阿布都','崔花花'],columns=[3])

d=a.join(b,how='outer')

d

     0    3

0  王小二  李二狗

1  谢老大  阿布都

2  木子李  崔花花

df.loc[0]#查看索引为0的行

df

   A      B   C

0  x  100.0  10

1  y  200.0  20

2  z  300.0  30

df.loc[0]

A        x

B    100.0

C       10

df.loc[0:1]

   A      B   C

0  x  100.0  10

1  y  200.0  20

df['A']=df.loc[:,'A']查看A列的数据

新增列

1.直接赋值

df.loc[:,"D"]=df['B']+df['C']

df

   A      B   C

0  x  100.0  10

1  y  200.0  20

2  z  300.0  30

df.loc[:,"D"]=df['B']+df['C']

df

   A      B   C      D

0  x  100.0  10  110.0

1  y  200.0  20  220.0

2  z  300.0  30  330.0

2.df.apply

df.apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), \*\*kwds)

沿着列或者行把series的数据传递到func中,axis=0沿着列。Asis=1沿着行

比如

df如下:

   A  B  C

0  1  4  7

1  2  5  8

2  3  6  9

def my_func(x):

    return x.max()+x.min()

df['D']=df.apply(my_func,axis=1)

把行数据(1,4,7)传递给x,并且赋值给D列

得到以下数据:

   A  B  C   D

0  1  4  7   8

1  2  5  8  10

2  3  6  9  12

在比如:

df.loc[3]=df.apply(my_func,axis=0)

把列数据(1,2,3)传递给函数,并把结果赋值给index=3的行里面

得到以下数据:

   A   B   C

0  1   4   7

1  2   5   8

2  3   6   9

3  4  10  16

import pandas as pd

df=pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})

print(df)

def my_func(x,y):

    return x*y

a=df.apply(my_func,axis=0,args=(2,))

print(a)

得到一个结果:

   A   B   C

0  1   4   7

1  2   5   8

2  3   6   9

3  4  10  16

然后args=(2,)不能写成args=(2),不然会报错:TypeError: Value after * must be an iterable, not int

查看行/列计数  df['C'].value_counts()    df.loc[0].value.counts

import pandas as pd

df=pd.read_excel(r'C:\Users\xWX1134691\Desktop\openpyxl\4.xlsx',sheet_name=1,header=None,names=['Birthdate','Name'])

print(df.head())

def my_func(x):

    return "\""+x+"\""

def my_func1(x):

    return x.replace("\"","")

df.loc[:,'Name']=df['Name'].apply(my_func)

print(df.head())

df.loc[:,'Name']=df['Name'].apply(my_func1)

print(df.head())

输出:

   Birthdate  Name

0       7.05   芭芭拉

1       7.09    卡维

2       7.14  九条裟罗

3       7.15    胡桃

4       7.20  达达利亚

   Birthdate    Name

0       7.05   "芭芭拉"

1       7.09    "卡维"

2       7.14  "九条裟罗"

3       7.15    "胡桃"

4       7.20  "达达利亚"

   Birthdate  Name

0       7.05   芭芭拉

1       7.09    卡维

2       7.14  九条裟罗

3       7.15    胡桃

4       7.20  达达利亚

```

python

str1="2001:2001:4904:2010::FFF 2001:2001:4906:2010::FFF"

str2=str1.replace("2001:2001","FE80:2001")

str2

'FE80:2001:4904:2010::FFF FE80:2001:4906:2010::FFF'

```

这样就可以

```

python

df=pd.read_excel(r"C:\Users\xWX1134691\Desktop\openpyxl\5.xlsx")

df

   vlanif                      ipv6

0    1110  2001:2001:4904:2010::FFF

1    1111  2001:2001:4906:2010::FFF

2    1112  2001:2001:4903:2010::FFF

df.loc[:,'link-local']=df['ipv6'].str.replace("2001:2001","FE80:2001")

df

   vlanif                      ipv6                link-local

0    1110  2001:2001:4904:2010::FFF  FE80:2001:4904:2010::FFF

1    1111  2001:2001:4906:2010::FFF  FE80:2001:4906:2010::FFF

2    1112  2001:2001:4903:2010::FFF  FE80:2001:4903:2010::FFF

```

这样也可以

```

python

df.loc[:,'link-local']=df['ipv6'].replace("2001:2001","FE80:2001")

df

   vlanif                      ipv6                link-local

0    1110  2001:2001:4904:2010::FFF  2001:2001:4904:2010::FFF

1    1111  2001:2001:4906:2010::FFF  2001:2001:4906:2010::FFF

2    1112  2001:2001:4903:2010::FFF  2001:2001:4903:2010::FFF

```

这样就不行

这个是为啥?

···

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值