改添值
修改值
在pandas的上一篇中,我们提到了选择值,那么修改值就是在选择值的基础上直接赋值就行了。例子如下:
import pandas as pd
data = {'Name': ['Tom', 'Jane', 'Alice', 'Mike'],
'Age': [20, 21, 19, 18],
'City': ['New York', 'Paris', 'Berlin', 'London']}
dates=pd.date_range('20240812',periods=4)
df = pd.DataFrame(data,index=dates)
df.loc['20240812','Name']='le'
df.iloc[1,1]=25
df.loc[df.Age==20,'Age']=22
df.loc[df.Age>20,'Age']=pd.Series([12,23,24,21],index=dates)
print(df)
Name Age City
2024-08-12 le 12 New York
2024-08-13 Jane 23 Paris
2024-08-14 Alice 19 Berlin
2024-08-15 Mike 18 London
请按任意键继续. . .
其中,在第四个赋值中,等号后边是Series类型的数据,它是一个包含四个年龄的数组,而前面符合df.Age>20的数据只有一个,但是由于Series有index,所以符合条件的Age会根据i相对应的ndex去改变其值。
处理缺失数据
有时候我们需要对收集的数据进行缺失处理,那么如何使用pandas去处理呢?如下:
import pandas as pd
import numpy as np
data = {'Name': ['Tom', 'Jane', 'Alice', 'Mike'],
'Age': [20, 21, 19, 18],
'City': ['New York', 'Paris', 'Berlin', 'London']}
dates=pd.date_range('20240812',periods=4)
df = pd.DataFrame(data,index=dates)
df.loc[:,'Female']=pd.Series([np.nan,'f','m',np.nan],index=dates)
print(df)
print(np.any(df.isnull()))#检查是否有nan值
#或df.isnull().any().any()
m=df.dropna(axis=0,how='all')#去除
print(m)
print(df.fillna(value='m'))#填充
Name Age City Female
2024-08-12 Tom 20 New York NaN
2024-08-13 Jane 21 Paris f
2024-08-14 Alice 19 Berlin m
2024-08-15 Mike 18 London NaN
True
Name Age City Female
2024-08-12 Tom 20 New York NaN
2024-08-13 Jane 21 Paris f
2024-08-14 Alice 19 Berlin m
2024-08-15 Mike 18 London NaN
Name Age City Female
2024-08-12 Tom 20 New York m
2024-08-13 Jane 21 Paris f
2024-08-14 Alice 19 Berlin m
2024-08-15 Mike 18 London m
请按任意键继续. . .
首先我们检查一下数据中是否有nan值,利用np.any(df.isnull()) 如果想要去除nan所在的列或行可以使用df.dropna(),参数how有any和all两种,any表示有一个即剔除,all表示如果一行或一列全部为nan则剔除。 axis表示选择行或列。 如果想填充nan值则利用df.fillna(),value参数是填充的值
添加列值
添加值和修改值在语句上没有什么太大的差异,只不过添加列值时的列标签名是DataFrame中没有的。如下:
import pandas as pd
data = {'Name': ['Tom', 'Jane', 'Alice', 'Mike'],
'Age': [20, 21, 19, 18],
'City': ['New York', 'Paris', 'Berlin', 'London']}
dates=pd.date_range('20240812',periods=4)
df = pd.DataFrame(data,index=dates)
# df.loc[:,'Gender']=pd.Series(['m','f','f','m'],index=dates)
df['Gender']=pd.Series(['m','f','f','m'],index=dates)
print(df)
添加值只能使用标签索引添加,不能使用数值。换句话说,也就是添加值只能使用df.loc,不能使用df.iloc。且添加值一般都是添加一列或几列,如果想要添加几行或一行,就需要使用合并功能了。
修改列名
如果想要修改DataFrame中的某一列列名,可以这样做:
import pandas as pd
data = {'Name': ['Tom', 'Jane', 'Alice', 'Mike'],
'Age': [20, 21, 19, 18],
'City': ['New York', 'Paris', 'Berlin', 'London']}
dates=pd.date_range('20240812',periods=4)
df = pd.DataFrame(data,index=dates)
ddf=df.rename(columns={'Name':'name'})
print(ddf)
以字典的形式传给df.rename的参数columns即可实现修改列名。