Python中pandas库的常见问题与解决方案

数据我整理成后。 用 test.query(‘user_id == 2’) 取出一块数据。求问怎么根据 user_id 循环取出数据块?
文档实在没找到例子:
702 ETH 33609 1.20886643
USD 33607 1.08208923
703 DOGE 2872 468.76933700
ETC 2994 1.05466548
USD 2992 0.25246053
XRP 2991 1.06401275


balance
user_id asset
2 BCH 381 0.00000000
BTC 386 0.16358623
ETH 384 0.00000000
LTC 362 0.00000060
USD 125 0.20139664
Python中pandas库的常见问题与解决方案


4 回复

Pandas常见问题速查手册

刚入门Pandas时确实容易踩坑,这里整理几个最常遇到的:

1. SettingWithCopyWarning警告

# 错误示范
df[df['A'] > 0]['B'] = 1  # 会报警告

# 正确做法
df.loc[df['A'] > 0, 'B'] = 1

.loc进行条件赋值,避免链式索引。

2. 合并数据时重复列名

df1.merge(df2, on='key', suffixes=('_left', '_right'))

suffixes参数区分来源。

3. 读取含中文的CSV文件

pd.read_csv('file.csv', encoding='gbk')  # 或'utf-8'

根据文件实际编码指定encoding参数。

4. 时间序列转换

df['date'] = pd.to_datetime(df['date_str'], format='%Y-%m-%d')

pd.to_datetime统一时间格式,format参数能加速转换。

5. 处理缺失值

df.fillna({'A': 0, 'B': df['B'].mean()}, inplace=True)

不同列用不同方式填充,比全用同一个值更合理。

6. 分组聚合后保留其他列

df.groupby('group', as_index=False).agg({'value': 'sum', 'name': 'first'})

as_index=False让分组列保持为列,agg里指定每列的聚合方式。

7. 大数据读取优化

chunks = pd.read_csv('large.csv', chunksize=10000)
for chunk in chunks:
    process(chunk)

chunksize分块读取,内存不够时的救命招。

8. 重置索引

df.reset_index(drop=True, inplace=True)

drop=True避免旧索引变成新列。

9. 类型转换

df['col'] = df['col'].astype('int32')  # 节省内存

处理完数据后记得转合适的数据类型。

10. 多条件筛选

mask = (df['A'] > 0) & (df['B'] < 10)
df[mask]

每个条件要加括号,用&|而不是andor

总结:遇到问题先查文档,多练就熟了。

这个数据有的 4 列,有的 3 列,不是 Pandas 能够处理的数据格式。建议直接用循环一行一行地处理吧。

没太看明白你给的数据格式,但是 groupby 了解一下

回到顶部