pandas 列操作

1. 列的查改增删

1.1  列选择与排序

# 根据列名选择指定列
df_cc = data[['cc1', 'cc2']]
X = df.loc[:, fe_cols]
y = df.loc[:, ['label']]
# 选择指定数据类型的列,保留4位小数
for i in df.select_dtypes(include=['float64']).columns.tolist():
    df[i] = round(df[i], ndigits=4)
# 按指定列排序(按aa生序,bb降序)
data = data.sort_values(by=['aa', 'bb'], ascending=[True,False])

1.2 删除指定列

# 删除指定列
df_aa = data['aa']
df_bb = data['bb']
data = data.drop(labels=['aa', 'bb'], axis=1, inplace=True)
 
# 删除索引列
data = data.reset_index(drop=True)

1.3 修改列

# 更改列名
data.columns = ['aa_new', 'bb_new']
# 针对某一列进行值替换(将字段‘aa’中的-1全部替换成0)
data = data['aa'].replace(-1, 0, inplace=True)
# 更改数据类型
data['aa'] = dd['aa'].astype(np.float64)
data[['aa', 'bb']] = data[['aa', 'bb']].astype(int)
# 因为numpy.ndarray.astype内存分配开销,astype会比较慢
data.values.astype(np.float64) 

1.4 添加列

1. 直接赋值法

推荐使用.loc方式来赋值一列,直接df[xx]=的方式某些时候可能会有警告

# 数据清洗
df.loc[:,'高温'] = df['高温'].str.replace('度','').astype('int32')
df.loc[:,'低温'] = df['低温'].str.replace('度','').astype('int32')

# 新增列
df.loc[:,'温差'] = df['高温'] - df['低温']
df.loc[:,'aa'+ '_prct'] = df['高温'] / df['低温']
df['pt'] = '2020-12-01'
# 修改某一列,小数-->百分数
df.loc[:,'mean'] = df.apply(lambda x: str(round(x['mean']*100,2))+"%",axis=1)
或
s = pd.Series(['11','12','13','14'] ,name='age')
df.loc[:,'age'] = s

# 多分类,将label从1开始 --> 从0开始 (每个值都减1)
Y = data.loc[:, 'label'] - 1

2. apply函数

# axis=1表示对列操作,0则会把'高温','低温'当作行索引
df['温差'] = df.apply(lambda x:x['高温']-x['低温'],axis=1)

3. assign函数

# 返回一个新的df,可以添加一个或多个列
df2 = df.assign(cha=lambda x:x['高温']-x['低温'],
    sum=lambda x:x['高温']+x['低温'])

4. 条件筛选

df.loc[df['高温']-df['低温']>=15,'type'] = '高温差'
df.loc[df['高温']-df['低温']<15,'type'] = '低温差'

5. concat 函数(DataFrame 拼接)

# 按列拼接两个df
df_bb = pd.DataFrame(data=bb, columns=['bb'])
# 按列(左右拼接)
data = pd.concat([df_aa, df_bb], axis=1, ignore_index=True)
# 按行(上下拼接)
data = pd.concat([data1,data2], axis=0)

6. map函数

ser = df["Timestamp"]
# 导入自定义函数,处理某一列
ser = ser.map(lambda x: utils.get_hour_from_timestamp(x))

7. insert 函数

# 对“小时”进行分箱后,插入df,作为第五列
ser[ser < 7] = ser[ser < 7] + 24
ser = pd.cut(ser, bins=[7, 9, 17, 19, 31], right=False, labels=["E", "D", "L", "N"])
df.insert(5, "Time_hour", ser)

2. 列信息统计

# 均值
mean = data['aa'].value_counts().mean()
# 中位数
median = data['aa'].value_counts().median()
# 统计信息
print(data.loc[:, 'aa'].value_counts())
# 最小值
df.pt.min()

3. 类别特征编码

for feature in categroy_feature_list:
    feature_dummies = pd.get_dummies(data[feature])
    data = pd.concat([data, feature_dummies], axis=1)
data = data.drop(columns=categroy_feature_list)

4. 根据指定列进行去重

data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
# subset表示将这两列对应值相同的行进行去重,默认值为subset=None表示考虑所有列。
# keep取值:
#    first:表示保留第一次出现的重复行,是默认值;
#    last:表示保留最后一次出现的重复行;
#    False:表示去除所有重复行。
# inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。

你可能感兴趣的:(pandas,pandas,数据分析)