簡體   English   中英

Python Pandas CSV 將 Int64 轉換為對象並通過輸入調用右行

[英]Python Pandas CSV Converting Int64 to the Object and call the right row via input

我是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM