pandas-dataframe增删改查

[toc]

dataframe处理

一、创建

  1. 从文件读取
  2. dict转为dataframe
1
2
3
df=pd.DataFrame(dict)
或者:
df=pd.DataFrame.from_dict(dict)

二、增加

添加内容

  1. 添加列:insert
1
2
3
4
df["newcolumn"]=series
或者:
new_columns = [92,94,89,77,87,91]
df.insert(2,"c2",new_columns)

数据合并

直接赋值
1
df["a","b"]=data["c","d"]
  1. 只能按列合并,不能按行
  2. 只能给原数据df中存在的index添加新列,不能添加新行,即连接时,两边的行需要index=index时,才会进行连接,类似于SQL的左连接。
append:添加行
  1. 添加:append:dict、list、dataframe、series
  2. 在表尾中添加新行,并且返回添加后的数据对象,如果添加的行中存在原数据中没有的列,那么将给原数据添加一个新列,并用nan补值。
  • 添加dict:必须有:ignore_index=True。

    1
    2
    3
    data=pd.Dataframe()
    a={"x":1,"y":2}
    data=data.append(a,ignore_index=True)
  • 添加:series:series必须有name。

    1
    2
    series=pd.Series(a,name="a")
    data=data.append(series)
  • 添加:list,如果list是一维则添加列,二维是行、列,三维是一个数值。

1
2
list=[1,2,3,4]
data.append(list)
contact
  1. 横向或纵向拼接,axis=0为纵向拼接,axis=1为横向拼接。join为inner取交集,outer取并集

三、获取–查询

loc

  1. 可以获取某几行所有列:
  • 一行:loc[1]
  • 连续几行:loc[1:3]
  • 不连续几行:loc[[1,2,4]]
  • 符合条件的行:df.loc[df[“c1”]>90]
  • 按顺序选择为True的行:df.loc[[True,False,True,False]]
  • 复杂的例子
    1
    2
    3
    4
    cond_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]
  1. 符合条件的行与列
  • 一个数据:loc[1,”c1”]
  • 连续的行、列:loc[1:2,”c1”:”c2”]
  • 不连续的行、列:loc[[1,2,4],[“c1”,”c3”]]
  • 条件选择后,再进行列选择:df.loc[df[“c1”]>90,”c1”:”c3”]

    loc与iloc

  1. iloc是index locate即根据索引位置进行定位,只接受数字,loc则使用索引名称进行定位。
  2. loc[0:5,”c1”:”c3”]:展示0-5行,c1、c2、c3
    ,iloc[0:5,0:2]:展示0-4行,0、1列。

    at与iat:选择单个值

  3. df.at[1,”c1”],据说比loc的方式要快。
  4. iat与at的关系类似于iloc与loc
    3.可以不掌握,因为loc与iloc也可以做到单值获取。
1
df.loc[~df.work_year.isna()]

四、删除

  1. drop 删除行或列
1
2
df.drop([2,4],axis=0,inplace=True)
df.drop(["name","city"],axis=1,inplace=True)

五、修改

数值的修改

  1. 缺失值填充
1
df["a"]=df["a"].fillna(" ")
  1. 替换
  2. loc方法对某些行、某些列、某些行与列进行修改。

    列名的修改

  3. 直接赋值全部修改
1
df.columns=["c1","c2","c3"]
  1. 使用rename方法:比较推荐
1
df.rename(columns={"c1":"a1"},inplace=True)
  1. 索引修改
1
2
3
4
5
6
### 修改索引名称
df.rename({0:"r1"},inplace=True)
### 重置索引
df.reset_index(inplace=True,drop=True)
### 设置其他列为索引
df.set_index('id')