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库的常见问题与解决方案
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]
每个条件要加括号,用&、|而不是and、or。
总结:遇到问题先查文档,多练就熟了。
这个数据有的 4 列,有的 3 列,不是 Pandas 能够处理的数据格式。建议直接用循环一行一行地处理吧。



