使用Pandas DataFrame筛选数据时年份属性无需加引号的原因及相关类型疑问
关于Pandas读取CSV时数值/字符串类型与筛选的疑问解答
我完全懂你之前被这个问题卡壳的感觉——曾经我也在字符串和数值类型的筛选上绕了好几个弯!咱们一个个来拆解你的问题:
1. CSV中的年份变量会被归类为字符串还是数值类型?
Pandas在读取CSV时会自动推断列的类型:
- 如果你的年份列里全是纯数字(比如
2020、2021这种),默认会被识别为整数类型(int64);如果列里存在缺失值,会自动转为浮点数类型(float64)。 - 只有当年份里包含非数字字符(比如
"2020年"、"2020-")时,才会被识别为字符串类型(object)。
你可以用这个命令快速验证列的类型:
print(df['years'].dtype)
2. 浮点数筛选时也无需添加引号吗?
没错!和年份的规则完全一致:
- 如果CSV里的浮点数是纯数字格式(比如
3.14、-2.5),Pandas会自动识别为浮点数类型(float64),筛选时直接用数值对比即可,不用加引号,比如:specific_value = df[df['price'] == 9.99] - 只有当浮点数被包裹在非数字字符里(比如
"3.14元"、"$2.50"),才会被当成字符串,这时候筛选才需要加引号。
关于你给出的例子的确认
你写的正确写法是完全没问题的:
df = pd.read_csv("somerandom_with_years_as_an_attribute.csv") specific_year = df[df['years'] == 2020]
如果用df['years'] == '2020',因为类型不匹配(数值 vs 字符串),会返回一个全是False的布尔序列,最终得到空的DataFrame,这也是你之前可能踩过的坑吧😅
另外补充个小技巧:如果因为特殊需求,你需要把年份强制读成字符串类型,可以在read_csv时指定dtype参数:
df = pd.read_csv("your_file.csv", dtype={'years': str})
这时候筛选就必须用'2020'这种字符串形式了,但一般情况下没必要这么做。
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

