pandas concat_Pandas 工作常用操作(一)

以下是我工作中使用pandas时的一些常用操作

python pandas常用操作

1. df.isna().sum() # 统计所有列的缺失值

df.iana().sum()/df.shape[0] # 计算所有列缺失率

df['feature'].isna().sum() # 统计单列的缺失值

df['feature'].isna().sum()/df.shape[0] # 计算单列缺失率

2. loc&iloc

df.loc[a, b] # a是选取行, b是选取列

df.loc[:, :] # ':' 在这里指的是选取所有行, 所有列

df.loc[[index], :] # index是dataframe的索引, 根据索引选择我们想要的数据

df.loc[index:, 'feature_1':'feature_5'] # 行选取index后面所有, 列选取feature_1到feature_5之间的所有特征

df.loc[index] # 如果loc后面只有一个元素的话, 那么默认是根据索引选择数据

关于loc跟iloc我踩过的坑:

比如说我们现在需要选取索引

loc是根据索引名称来选取数据的; 而iloc就是根据索引的顺序(从0开始)

举个例子:

cd28221d26c3b898e7449b6fae8a1cf4.png

在上面这个dataframe中,我想要索引为[48, 8]的两行

那么用loc的话: df.loc[[48, 8], :]

如果用iloc的话: df.iloc[[0, 2], :]

3. df.feature[data.feature == 1] = 0 # 根据条件对df做修改(在这里是将df中feature列值为1的元素都改为0)

4. merge 合并操作,相对于concat拼接来说我更喜欢merge, 当然concat也有他的优点, 只不过我比较少用

pd.merge(df_1, df_2, how='', left_on='', right_on='')

合并df_1, df_2

how可选四个值: 'left'、'right'、'outer'、'inner'其中'left'应该是最常用的。

left_on: 左边的dataframe的关连键

right_on: 右边dataframe的关连键 如果不指定这两个关连键的话, 函数默认去搜索相同的关连键来做关联。

(很多时候, merge并不仅仅来做合并,我经常拿merge来做映射)

# 5. concat 拼接

pd.concat([df_1, df_2], axis=1) # axis=1 拼接列; axis=0 拼接行

# 6. 遍历整个dataframe里面的每一个元素, 可以加条件对元素进行修改, 这个方法可以同时对任意列的元素进行操作

# (如果有更好更简单的方法请踹我)

for index, row in df.iterrows(): # 一行一行来遍历的

if row_feature_1 > 0:

row.feature_2 = row.feature_2 + 1

else:

row.feature_2 = row.feature_2 + 2

# 7. 删除dataframe中的某一列

del df['feature_name']

# 8. 修改整个dataframe的数据类型, 如果是浮点型数据, 那么默认的都是float64,

# 数据量比较大的时候, 如果float32可以的话, 建议修改成float32, 释放内存, 训练模型的话速度也会更快。

df = df.astype('float32')

# 9. 一般在排序后,我们可能需要获取最大的n个值或最小值的n个值,我们可以使用 nlargest 和 nsmallest 方法

# 来完成,这比先进行排序,再使用 head(n) 方法快得多。

df.feature_name.nlargest(2) # 显示feature_name这一列最大的两个值

df.feature_name.nsmallest(2) # 显示feature_name这一列最小的两个值

# 10. 根据某一列给另一列赋值

df['是否'] = df.feature_1.map(lambda x: iii(x)) # iii() 自己定义方法根据x的值生成返回值

# 11. pandas.read_csv()读取数据 MemoryError内存错误 解决方法

# 当csv文件过大的时候, 一次性读取可能会引发MemoryError内存错误, 为此, pandas有内置的方法来解决这个问题, 就是分批读取然后再合并

data = pd.read_csv(path, sep=',', iterator=True)

loop = True

chunkSize = 1000

chunks = []

index=0

while loop:

try:

print(index)

chunk = data.get_chunk(chunkSize)

chunks.append(chunk)

index+=1

except StopIteration:

loop = False

print("Iteration is stopped.")

print('开始合并')

data = pd.concat(chunks, ignore_index=True)

# 12.group_by 根据某一列分组, 然后去统计另外一列的值, 例如:sum、max、min (返回的是每个分组中的总和、最大值、最小值, 做特征工程的时候常用)

data.groupby(feature_1)[feature_2].apply(sum).reset_index() # reset_index() 会将数据重构成一个表

# 13. 判断数据中是否存在 极值

np.isinf(data[i]).any()

# 14. 统计特征中每一个值出现的次数

data[feature_1].value_counts()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值