pandas -2 索引和选择数据
对于一种数据结构,最基本的操作就应该是增删改查了。
1. 行列选择
行选择和列选择有许多方法,很容易记混,常用的要记住。
主要方法有三种: iloc
, loc
, []
行选择
切片
1
2
3
4
5// 切片
df[a:b]
// 隔1行选择
df[::2]指定位置
df.iloc[1, 1]
df.iloc[1:10, 2:3]
df.iloc[1:10]['Price']
指定索引
df.loc["index1", "index2"]
按照条件查找
df[( df["row2"] == 1) & (df["row2"] == "null")]
df.loc[( df["row2"] == 1) & (df["row2"] == "null")]
根据列的多个值,选择行
List = [1,2,3,4,5]
train[train["customer_id"].isin(List)]
列选择
通过列标签选择单列
df["price"]
通过列标签选择多列
df[["price", "time"]]
通过列索引,选择前3列
df.iloc[:, :3]
行列选择
df.loc["index1" : "index2", ["price"]]
df.iloc[a:b]['Price']
随机采样行或者列
1 | s.sample(frac=0.5) |
分类别等数量抽样
1 | # 降采样 -- 分类抽样 |
2. 行的增删改查
增加
单列
1 | // 末尾增加 |
多列
pd.concat([df, pd.DataFrame(columns=["C","D"])])
单行(待验证)
1 | // loc 添加 |
多行
多行相当于合并两张表了,可以参考(merge,concat)方法。
test_ = pd.merge(tmp, data.loc[:,["customer_id", "label"]],on=['customer_id'],how='left',copy=False")
删除
列
1 | // del 方法 |
行
1 | // 根据索引 删除行 |
按照条件删除行
1 | df.drop(df[df["order_pay_time"] < pd.to_datetime("2013-11-12 23:59:44") ].index) |
修改与查找
单值修改和查找时, 参考选择行列方法。
多值查找时,
按条件查找
df_train[( df_train["row"] == 1) &( == "null")]
query 查找
df.query('(a < b) & (b < c)')
替换
单个替换,inplace = True 覆盖源文件
df.replace(to_replace, value, inplace = True)
多值替换—-字典
df.replace({"A":"B", 29:100})
按条件替换
df.where(df > 0, -df, inplace=True)
交换两列的位置
1 | df[['B', 'A']] = df[['A', 'B']] |