# 根据列名选择指定列
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])
# 删除指定列
df_aa = data['aa']
df_bb = data['bb']
data = data.drop(labels=['aa', 'bb'], axis=1, inplace=True)
# 删除索引列
data = data.reset_index(drop=True)
# 更改列名
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. 直接赋值法
推荐使用.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)
# 均值
mean = data['aa'].value_counts().mean()
# 中位数
median = data['aa'].value_counts().median()
# 统计信息
print(data.loc[:, 'aa'].value_counts())
# 最小值
df.pt.min()
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)
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
# subset表示将这两列对应值相同的行进行去重,默认值为subset=None表示考虑所有列。
# keep取值:
# first:表示保留第一次出现的重复行,是默认值;
# last:表示保留最后一次出现的重复行;
# False:表示去除所有重复行。
# inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。