导入CSV后获空DataFrame,如何匹配目标数据格式实现筛选?
解决CSV导入后筛选为空的问题
问题背景
你通过以下代码构造的DataFrame,使用指定筛选逻辑能正常返回结果:
df = pd.DataFrame({'Result1': [1552, 3954, 7495], 'Result2': [1552, 3950, 1559]}, index=['Customer1', 'Customer2', 'Customer3'])
筛选代码:
results_to_keep = ['155101', '1551011'] df2 = df[df.isin(results_to_keep)] df3 = df2.dropna(axis=0, how='all') print(df3)
但从CSV文件导入数据后执行相同筛选,却得到空DataFrame。CSV内容片段如下:
Customer Reference Profile Name Score Band Text Result1 Result2 Result3 038ff126-1ed5-4a96-bb34-3f4b595228d3 UK 1200 APPROVED 155261 155101 155151 87529660 Germany 1111 APPROVED 2289528 401126 401102 37a52968-8093-41e5-8a2e-6bd251d0666d UK 2200 APPROVED 155261 155101 155151 1.39E+08 Germany 1111 APPROVED 2283524 2283525 2282111 1d45f78b-01c5-4007-8f8c-a9fb845cba1f UK 1300 Fail 155261 155101 155151 a56b590b-b8bd-4e56-987e-f801a37e487d UK 1300 Fail 155261 155101 155151 1.39E+08 Germany 2221 APPROVED 2283525 2282111 2282100
核心原因
问题出在数据类型不匹配和索引结构不一致:
- 构造的DataFrame中,Result列是整数类型,且索引为客户标识;
- CSV导入时,长数字或科学计数法格式的数值会被自动识别为浮点数或字符串(比如
1.39E+08),导致与筛选的字符串值('155101')无法匹配;同时默认导入的索引是数字序列,和构造的DataFrame结构不一致。
解决方法
1. 按构造的DataFrame结构导入CSV
读取CSV时指定客户列为索引,并统一Result列的类型为字符串(避免科学计数法干扰):
import pandas as pd # 读取CSV,设置Customer Reference为索引,强制Result列类型为字符串 df = pd.read_csv( 'your_file.csv', index_col='Customer Reference', dtype={'Result1': str, 'Result2': str, 'Result3': str} )
2. 执行原筛选逻辑
此时类型匹配,原筛选代码可正常运行:
results_to_keep = ['155101', '1551011'] df2 = df[df.isin(results_to_keep)] df3 = df2.dropna(axis=0, how='all') print(df3)
可选:转为整数类型处理
如果希望用整数筛选,需先处理CSV中的科学计数法数值,转成整数类型:
df = pd.read_csv('your_file.csv', index_col='Customer Reference') # 将Result列的数值统一转为整数(处理科学计数法的浮点数) for col in ['Result1', 'Result2', 'Result3']: df[col] = pd.to_numeric(df[col], errors='coerce').fillna(df[col]).astype(int) # 筛选值改为整数列表 results_to_keep = [155101, 1551011] df2 = df[df.isin(results_to_keep)] df3 = df2.dropna(axis=0, how='all') print(df3)
关键注意点
- 确保索引一致:必须将
Customer Reference设为DataFrame的索引,和你构造的DataFrame结构对齐; - 确保类型匹配:筛选值的类型(字符串/整数)必须和Result列的类型完全一致,否则无法匹配到数据。
内容的提问来源于stack exchange,提问作者brummie49
相关产品推荐
相关产品推荐

