【来,好文增加曝光率】DataFrame踩坑整理(一)

DataFrame踩坑整理(一)

不得不说,工作中几乎天天跟DataFrame打交道,真的很有总结和记住的必要,话不多说,直接上干货。输入以下语句前别忘记:
import pandas as pd
import numpy as np

1、读入文件:
df=pd.read_csv(path,names=[‘’,’’,’’]);
#读入文件用names,格式转换用columns;

2、list转dataframe :
df=pd.DataFrame(data,column=[‘a’, ’b’]) ;
Dataframe 转list :df.values.tolist();
某一列数据转list :list(df[‘a’]);

3、两个dataframe 取交集,也可用于删除重复项目
pd.merge(df1,df2);
#很好用,速度快。

4、两个dataframe取并集(合并):
pd.concat([df1,df2])
#括号里面一定要写中括号。
#两个表合并之后一定要reset_index,否则索引值不是按顺序的。

5、DataFrame数据形式转换 :
Df=pd.DataFrame(df,type=np.float);

6、删除空值 :
df.dropna(axis=0,how=’any’,inplace=True);
#how的取值是any或者all。

7、填补缺失值 :
df.fillna(0,inplace=True) ;
#不要忘了inplace=True,否则不会在原表上修改;

8、计算缺失值个数:
list(data[‘a’].isnull()).count(True);

9、数据替换 :
df[‘a’]=df[‘a’].replace(‘.’ , ’0’);

10、根据一列数据生成另一列数据(例如归一化):
dt=df.apply(lambda x:(x-np.min(x))/(np.max(x)-np.min(x)));
#apply+lamda这个语句还是好用的,例如给不同分值的人分等级,可以先做一个字典,直接映射到字典里面的值。

11、筛选数据 :

df[df[‘a’]!=1][‘a’,’b’,’c’];
#选择a这一列中不为1的数据;

12、数据筛选(按列) :
df.iloc[:, df.columns!=’flag’];

13、数据筛选(按值):
A_list=[0.1,0,2,0.3];
df[‘a’].isin(alist);

14、取第一行:
df.iloc[[1]] ;
#一定要写两个中括号;

15、元素定位 :
df.loc[0:3,[‘a’,’b’]] #loc需要写列名;
df.iloc[0:3,[0,1]];

16、删除某一列 :
del df[‘a’];

17、删除多列 :
df=df.drop([‘a’,’b’],axis=1);

18、抽样 :
df[features].sample(n=1000);
#但感觉这个不太好用,可以用np.random.choice;

19、展示重复值 :
df[df.duplicated(keep=’first’)];
#不加列名就是展示所有列;

20、删除重复值 :
df.drop_duplicates(keep=’first’,inplace=True);
#这一步做完也一定要reset_index;

21、数据排序 :
df.sort_values(‘a’,ascending=True,inplace=true);

22、插入新的一列 :
df[‘d’]=None;
#然后再用apply+lambda赋值;

23、某一列值分类计数 :
df[‘a’].value_counts() ;
#要画图的话直接在后面加.plot(kind=’bar’);

24、求分位数 :
df[‘a’].quantile(0.25);

25、数据保存成csv文件 :
df.to_csv(‘a.csv’,header=False,index=False);
#如果不写后面两个False,就会自动生成一列索引和一个表头;
26、删除一列(太粗暴,太直接,早被拷贝、实例变量搞烦,看着爽,抄一遍):
del df[‘a’];
27、重命名一个列的列名,不用修改全部列的名字

autoc=autoc.rename(columns={'借':'值'})

28、melt,骚年的骚操作。pivot的逆操作。excel中能搞死你。
id_vars:不需要被转换的列名。value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。

pd.melt(df,id_vars=['col2'],value_vars=['col1'],var_name='hi',value_name='hello')

29、dataframe,读入时指定数据类型。string,是np.string_,string后面有一个小尾巴。

stockcodes=pd.read_csv("stockcode.txt",dtype={'网易代码':np.string_},index_col=False,dayfirst=True,sep='\t',encoding='utf_8_sig',quoting=3,error_bad_lines=False,header=0)

30.日期数据类型,浪费生命的玩意儿。

apple['Date']=pd.to_datetime(apple['Date'])

31.r,c=df.shape,不是r,c=df.shape()
正式开发的时候,应该是没有时间抱怨,接着处理下一个bug。

32.本行与上一行shift

d=[data['成交量']-data['成交量'].shift(-1)]
d[0][0]=0
d[0][len(d[0])-1]=0
data['diff1']=d[0]
print(d,data.shape)
print(data)

33.修改某一列的名称。很让人不爽的操作。unamed:0,这种情况可以设置该列为index,然后reset_index。得到一个列名index,然后就可以用rename修改。难道没有一个根据顺序号修改名称的功能吗?

cpi=pd.read_csv("./statedata/cpi.txt",sep='\t',header=0,index_col=0)
cpi=cpi.reset_index()

34.按行遍历,倒是很老实,加一个inter。pandas老要注意index的处理,表格一列,默认就是index不是更干净:

for index,row in code.iterrows():

35.很让人慌的参数。header=0,读取的时候有头,如果to_csv的时候加了就没头。的确自己的地盘不需要和别人说得太明白,否则怎么坑人。

36.列逆序,神一样的操作。

   #时间逆序
    e=e.iloc[:, ::-1]

(未完待续。。。)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 DataFrame 的 `assign` 方法来增加一列。具体的操作步骤如下: 首先,假设你有一个 DataFrame,名为 `df`,你要在其中增加一列,名为 `new_col`,该列的值为 `value`。 那么,你可以使用如下代码来增加该列: ```python df = df.assign(new_col='value') ``` 这行代码会在原 DataFrame增加一列,名为 `new_col`,并将该列的所有值都赋值为 `'value'`。 如果你想要根据某些条件来计算该列的值,你可以使用 lambda 表达式。例如,假设你要在 DataFrame增加一列,名为 `new_col`,该列的值为 `col1` 与 `col2` 相加。那么,你可以使用如下代码来增加该列: ```python df = df.assign(new_col=lambda x: x['col1'] + x['col2']) ``` 这行代码会在原 DataFrame增加一列,名为 `new_col`,并将该列的值计算为 `col1` 与 `col2` 相加。 除了 `assign` 方法外,还可以使用下面这种方式来增加一列: ```python df['new_col'] = 'value' ``` 这行代码会在原 DataFrame增加一列,名为 `new_col`,并将该列的所有值都赋值为 `'value'`。 需要注意的是,在使用这种方式增加列时,如果你想要根据某些条件来计算该列的值,你需要使用类似于 lambda 表达式的方式来进行计算。例如,假设你要在 DataFrame增加一列,名为 `new_col`,该列的值为 `col1` 与 `col2` 相加。那么,你可以使用如下代码来增加该列: ```python df['new_col'] = df.apply(lambda x: x['col1'] + x['col2'], axis=1) ``` 这行代码会在原 DataFrame增加一列,名为 `new_col`,并将该列的值计算为 `col1` 与 `col2` 相加。需要注意的是,`axis=1` 表示对 DataFrame 中的每一行进行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值