You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:05:56