python - Python Pandas CSV 将 Int64 转换为 Object 并通过输入调用正确的行
问题描述
我是 Python Pandas 的新手,我正在努力解决问题。
我正在解决在我的 csv 中转换 dtype 值的问题。
我写了一个简单的例子来了解问题是什么,但我看不到任何东西,我无法找到它为什么不起作用..请参见下文。
我现在有一个包含 3 列的 CSV 表对于 A 和 B,dtypes 是 Int64 对于 C 它是对象 如果我将变量设置为 str,它会将值从 int64 更改为对象。
我的代码是这样的:
import pandas as pd
data_Cisla = pd.read_csv("Cisla.csv", sep=";" , dtype=str)
print(data_Cisla.dtypes)
print(data_Cisla)
def cisla():
vstup = input("Input value ")
print(vstup, type(vstup))
print(data_Cisla.loc[vstup])
当我还将使用 index_col="C" 并打印 cisla()
这是工作。程序会要求我从 C 列输入一个输入 - 所以我写了例如 text_2 它给了我输出 (C)text_2 (A) 2 (B) 20 ----> 这就是我要找的,但是A 列作为 index_col。
但是,如果我对 index_col A 使用相同的东西,当程序要求输入值时写入 20 它不起作用并给我错误..
我不明白的是,当我使用 data_Cisla.dtypes 打印每个步骤时,它会说我所有的列都是对象,那么有什么区别?为什么它适用于 C 列而不适用于 A 列?
最终代码如下所示
import pandas as pd
data_Cisla = pd.read_csv("Cisla.csv", sep=";" , dtype=str, index_col="C")
def cisla():
vstup = input("Input value ")
print(data_Cisla.loc[vstup])
cisla()
感谢你们对我的帮助。
解决方案
观察到行为的原因是“C”列是您的索引。我不知道为什么,因为它不在您的代码中。我的解决方案:
import pandas as pd
# build test data
data_Cisla = [[1, 10, 'text_1'],
[2, 20, 'text_2'],]
data_Cisla = pd.DataFrame.from_records(data=data_Cisla, columns=['A', 'B', 'C'])
data_Cisla = data_Cisla.reset_index()
def cisla(data_Cisla: pd.DataFrame, col: str, vstup: str):
# Do not change data_Cisla, just make sure vstup is in the right format (str or float)
try:
vstup = float(vstup)
except ValueError:
pass
mask = data_Cisla[col] == vstup
return data_Cisla[mask]
它将产生以下结果:
cisla(data_Cisla, 'C', 'text_1') #-> 1 | 10 | text_1
cisla(data_Cisla, 'A', '1') #-> -> 1 | 10 | text_1
cisla(data_Cisla, 'A', 1) #-> -> 1 | 10 | text_1
推荐阅读
- node.js - .patch() 不使用 Knex 将参数保存到 Objection.js 中的数据库
- javascript - 根据客户端数据加载下一个js
- class - Jmeter:BeanshellAssertion 错误:在类中找不到方法
- ansible - Ansible 访问 vars 提示值以检查 dict 中的多个值
- ios - PayPal Checkout 直接使用 Braintree SDK - Swift
- html - 在移动设备上使用回退以使用颜色而不是背景图像
- javascript - 如何使用Nodejs将数据作为文件夹中的文件名写入CSV文件
- reactjs - 为什么 TypeScript 中 Material-ui Button 元素的 React.createRef() 不能正常工作?
- javascript - 如何阻止我的程序连续两次输出相同的内容?
- visual-studio-code - 防止 Vscode 实时服务器在保存时向上滚动