Python正在将Int64转换为对象,并通过输入调用右边的行

Python正在将Int64转换为对象,并通过输入调用右边的行,python,pandas,csv,input,type-conversion,Python,Pandas,Csv,Input,Type Conversion,我是Python熊猫的新手,我正在努力解决这个问题 我正在努力解决转换csv中的数据类型值的问题 我写了一个简单的例子来理解问题是什么,但我看不到任何东西,也无法找到它不起作用的原因。。请看下面 我现在有一个包含3列的CSV表 如果我将变量设置为str,它将把值从int64改为object 我的代码如下: import pandas as pd data_Cisla = pd.read_csv("Cisla.csv", sep=";" , dtype=str) print(data_Cisl

我是Python熊猫的新手,我正在努力解决这个问题

我正在努力解决转换csv中的数据类型值的问题

我写了一个简单的例子来理解问题是什么,但我看不到任何东西,也无法找到它不起作用的原因。。请看下面

我现在有一个包含3列的CSV表 如果我将变量设置为str,它将把值从int64改为object

我的代码如下:

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列作为索引列

但是,如果我将同样的东西用于索引列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