Python Pandas 的一些常见操作
程序员文章站
2022-04-20 08:21:08
...
文章目录
先行——产生日期序列:
请阅读文章:https://www.cnblogs.com/P–K/p/9723050.html
先行——产生实例数据:
ones = np.ones([3,3])
df = pd.DataFrame(data=ones,columns=['第一列','第二列','第三列'])
df['日期'] = Date.date_range('20180918', '2018-09-21')
df['NaN'] = [1,np.nan,2]
df['类别'] = ["苹果",'香蕉','梨']
dataframe 按照索引(、列名)删除某行(列)
用 drop,当参数 inplace = True 时,直接在源 df 修改。
删除行(按索引)
df_new = df.drop(index=[1],axis=0)
df_new = df.drop(index=range(2),axis=0) #删除连续的多行
删除行(按条件)
比如删除类别列等于“苹果”的行
ind = df.loc[df["类别"]=="苹果"].index
df_new = df.drop(index=ind,axis=0)
按多条件删除行
ind = df.loc[((df["类别"]=="苹果") & (df["第一列"]==1))].index
df_new = df.drop(index=ind,axis=0)
注意点:
多条件时,必须将条件用括号括起来,再用括号把左右条件括起来。然后,用 & 这个 bool 符号连接起来
以上条件当真是缺一不可啊,用了 and 连接,也给报错了:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
删除列(按索引、按条件)
也是如此,不过将 axis 改成 1 罢了。
删除列(按列名)
改 labels 参数
df.drop(labels=["第一列"],axis=1)
删除包含 NaN 的行和列
df.dropna(axis=0,how='any')
将某一列设置为索引列(一般为时间)
用 set_index 函数就行了,不过也有 inplace 参数
df.set_index(['日期'],inplace=True)
将 df 中的某些值替换为其他值
1、用 replace
2、用 apply
def fun(x):
#将 nan 替换为 0
if x==x:
pass
else:
x= 0
return x
df['NaN'] = df['NaN'].apply(fun)
拼接
比如将 类别 列进行 one-hot 编码,然后再将 类别列删除。将编码列的结果拼接到原 df 中:
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
tmp = lb.fit_transform(df['类别']) # tmp 是一个 np.array
df.drop(labels=['类别'],axis=1,inplace=True)
tmp = pd.DataFrame(data=tmp,columns=lb.classes_) #建立一个df
df[lb.classes_]=tmp
也就是说,可以用 df[列名s] = df2
这种方法拼接起来。
也可以用 concat 函数,比如
full = pd.concat([df,tmp],axis=1)
用 df 列表拼接起来。