[toc]
dataframe处理
一、创建
- 从文件读取
- dict转为dataframe
1 | df=pd.DataFrame(dict) |
二、增加
添加内容
- 添加列:insert
1 | df["newcolumn"]=series |
数据合并
直接赋值
1 | df["a","b"]=data["c","d"] |
- 只能按列合并,不能按行
- 只能给原数据df中存在的index添加新列,不能添加新行,即连接时,两边的行需要index=index时,才会进行连接,类似于SQL的左连接。
append:添加行
- 添加:append:dict、list、dataframe、series
- 在表尾中添加新行,并且返回添加后的数据对象,如果添加的行中存在原数据中没有的列,那么将给原数据添加一个新列,并用nan补值。
添加dict:必须有:ignore_index=True。
1
2
3data=pd.Dataframe()
a={"x":1,"y":2}
data=data.append(a,ignore_index=True)添加:series:series必须有name。
1
2series=pd.Series(a,name="a")
data=data.append(series)添加:list,如果list是一维则添加列,二维是行、列,三维是一个数值。
1 | list=[1,2,3,4] |
contact
- 横向或纵向拼接,axis=0为纵向拼接,axis=1为横向拼接。join为inner取交集,outer取并集
三、获取–查询
loc
- 可以获取某几行所有列:
- 一行:loc[1]
- 连续几行:loc[1:3]
- 不连续几行:loc[[1,2,4]]
- 符合条件的行:df.loc[df[“c1”]>90]
- 按顺序选择为True的行:df.loc[[True,False,True,False]]
- 复杂的例子
1
2
3
4cond_1=df["positionName"].str.contains("数据分析")
cond_2=~df["positionName"].str.contains("实习")
cond_3=~df["job_detail"].str.contains("实习")
data=df[cond_1&cond_2&cond3]
- 符合条件的行与列
- 一个数据:loc[1,”c1”]
- 连续的行、列:loc[1:2,”c1”:”c2”]
- 不连续的行、列:loc[[1,2,4],[“c1”,”c3”]]
- 条件选择后,再进行列选择:df.loc[df[“c1”]>90,”c1”:”c3”]
loc与iloc
- iloc是index locate即根据索引位置进行定位,只接受数字,loc则使用索引名称进行定位。
- loc[0:5,”c1”:”c3”]:展示0-5行,c1、c2、c3
,iloc[0:5,0:2]:展示0-4行,0、1列。at与iat:选择单个值
- df.at[1,”c1”],据说比loc的方式要快。
- iat与at的关系类似于iloc与loc
3.可以不掌握,因为loc与iloc也可以做到单值获取。
1 | df.loc[~df.work_year.isna()] |
四、删除
- drop 删除行或列
1 | df.drop([2,4],axis=0,inplace=True) |
五、修改
数值的修改
- 缺失值填充
1 | df["a"]=df["a"].fillna(" ") |
1 | df.columns=["c1","c2","c3"] |
- 使用rename方法:比较推荐
1 | df.rename(columns={"c1":"a1"},inplace=True) |
- 索引修改
1 | ### 修改索引名称 |