···
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
```
这样就不行
这个是为啥?
···