簡體   English   中英

Python Pandas CSV - 閱讀

[英]Python Pandas CSV - reading

我有一個問題,我必須讀取一個 CSV 文件並從每一行中獲取值。

例如

Name Surname Sex Date
Franco Puppi Male 01/01/2022
Max   Pezzali Male 03/4/2022
Fuffi Fuffi  female 03/8/202

上面的內容是我組成的csv文件,我想繼續閱讀這種CSV文件,單獨處理每一列。 例如

dfin = pd.read_csv(var_an.csv)
for index1 in dfin.iterrows():

Name = 
Surname = 
Sex = 
Date = 

你會如何提取那個? 我嘗試使用 str(dfin["Name"]),但我得到的錯誤應該是元組內的整數值,然后我將“名稱”更改為 0,1,2 但在第一列說它是 ouf索引。 我錯了什么? 我在 xlsx 文件上取得了輕松的成功。

def analytics(var_an):
    from termcolor import colored, cprint
    import pandas as pd
    dfin = pd.read_csv(var_an)
    for index1 in dfin.iterrows():
        print(index1)
        cprint(f'Found on file : {var_an}', 'red')
       # cprint(f'Obd = {obd} | pallet = {pallet} | loggerid = {loggerid} | system_date = {system_date} | system_time = {system_time} | house = {house} | hub = {hub}', 'on_green')

當我在上面執行此操作時,它會提取整行,但我無法單獨管理每個文件,例如

Name = 
Surname = 
Sex =

不確定你想要完成什么,但要從行中獲取值,你可以簡單地:

for idx, row in dfin.iterrows():
    name = row['name']
    surname = row['surname']
    sex = row['sex']

    ...

這不是一個 CSV,它期望每行中有逗號分隔的值。 當您使用read_csv時,您會得到一個包含名為“Name Surname Sex Date”的列的表。 把你的片段變成一個運行的腳本

import pandas as pd
import io

the_file = io.StringIO("""Name Surname Sex Date
Franco Puppi Male 01/01/2022
Max   Pezzali Male 03/4/2022
Fuffi Fuffi  female 03/8/202""")

dfin = pd.read_csv(the_file)
print(dfin.columns)

產出

1 columns: Index(['Name Surname Sex Date'], dtype='object')

因此,該文件沒有正確解析。 您可以將分隔符從逗號更改為正則表達式,並將所有空格用作列分隔符,您將獲得此示例數據的正確值

import pandas as pd
import io

the_file = io.StringIO("""Name Surname Sex Date
Franco Puppi Male 01/01/2022
Max   Pezzali Male 03/4/2022
Fuffi Fuffi  female 03/8/202""")

dfin = pd.read_csv(the_file, sep=r"\s+")
print(dfin.columns)

for i, row in dfin.iterrows():
    print(f"====\nRow {i}:\n{row}")
    Name = row["Name"]
    Surname = row["Surname"]
    Sex = row["Sex"]
    Date = row["Date"]
    print("Extracted:", Name, Surname, Sex, Date)

這得到了正確的東西:

Index(['Name', 'Surname', 'Sex', 'Date'], dtype='object')
====
Row 0:
Name           Franco
Surname         Puppi
Sex              Male
Date       01/01/2022
Name: 0, dtype: object
Extracted: Franco Puppi Male 01/01/2022
====
Row 1:
Name             Max
Surname      Pezzali
Sex             Male
Date       03/4/2022
Name: 1, dtype: object
Extracted: Max Pezzali Male 03/4/2022
====
Row 2:
Name          Fuffi
Surname       Fuffi
Sex          female
Date       03/8/202

還不錯。 但是仍然存在一個巨大的問題。 如果其中一個人的名字中有空格怎么辦? Pandas 會將名稱的每個部分拆分為單獨的一列,並且解析會失敗。 您需要比現有格式更好的文件格式。

暫無
暫無

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

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