【问题标题】:Python Pandas CSV Converting Int64 to the Object and call the right row via inputPython Pandas CSV 将 Int64 转换为对象并通过输入调用正确的行
【发布时间】:2020-07-01 00:17:34
【问题描述】:

我是 Python Pandas 的新手,我正在努力解决问题。

我正在解决在我的 csv 中转换 dtype 值的问题。

我写了一个简单的例子来了解问题所在,但我看不到任何东西,我无法找到它为什么不起作用..请参见下文。

我现在有一个包含 3 列的 CSV 表 For the A and B the dtypes is Int64 for C it is object 如果我将变量设置为 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 列作为 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()

谢谢你帮助我。

【问题讨论】:

    标签: python pandas csv input type-conversion


    【解决方案1】:

    观察到行为的原因是“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
    

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 2021-11-21
      • 1970-01-01
      • 2019-07-27
      • 2017-09-12
      • 2016-10-03
      • 2019-03-15
      • 1970-01-01
      • 2015-04-17
      相关资源
      最近更新 更多