欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 列表拼接起来。