簡體   English   中英

Python 將 csv 讀取到 Dataframe,與日期列發生沖突

[英]Python read csv to Dataframe, stuggeling with date columns

Python 將 csv 讀取到 Dataframe,與日期列發生沖突

大家好,

我在閱讀 csv 時遇到問題,它看起來像:

col_A;col_B;col_C;Col_Date_1;Col_Date_2;Col_Date_3
57;-;60;03.02.2020;-;06.07.2020
126;8;-;03.02.2020;04.03.2020;06.07.2020
-;45;-;30.01.2020;29.02.2020;29.06.2020
106;83;189;-;29.02.2020;29.06.2020
-;12;84;30.01.2020;29.02.2020;-

|col_A|col_B|col_C|Col_Date_1 |Col_Date_2 |Col_Date_3|
----------------------------------------------------
|57   |-    |60   |03.02.2020 |-          |06.07.2020|
|126  |8    |-    |03.02.2020 |04.03.2020 |06.07.2020|
|-    |45   |-    |30.01.2020 |29.02.2020 |29.06.2020|
|106  |83   |189  |-          |29.02.2020 |29.06.2020|
|-    |12   |84   |30.01.2020 |29.02.2020 |-         |

這是我嘗試閱讀 CSV 的方法。

import pandas as pd
df_puma = pd.read_csv(test.csv, sep=";",dayfirst=True, parse_dates=['Col_Date_1','Col_Date_2','Col_Date_3'], encoding='latin-1')

不幸的是,這兩種列(前 3 個整數和最后 3 個帶日期的列)都不是自動正確的類型。

df.info()
----------
col_A                404 non-null object
col_B                404 non-null object
col_C                404 non-null object
Col_Date_1           404 non-null object
Col_Date_2           404 non-null object
Col_Date_3           404 non-null object

好吧,我希望至少日期列應該被識別為一種日期,不幸的是不是:(。像:

df.info()
----------
col_A                404 non-null int64
col_B                404 non-null int64
col_C                404 non-null int64
Col_Date_1           404 non-null datetime64[ns]
Col_Date_2           404 non-null datetime64[ns]
Col_Date_3           404 non-null datetime64[ns]

有人可以給我一個提示,如何獲取正確類型的數據? 在我看來會是這樣的:

col_A;col_B;col_C;Col_Date_1;Col_Date_2;Col_Date_3
57;NaN;60;03.02.2020;NaT;06.07.2020
126;8;NaN;03.02.2020;04.03.2020;06.07.2020
NaN;45;NaN;30.01.2020;29.02.2020;29.06.2020
106;83;189;NaT;29.02.2020;29.06.2020
NaN;12;84;30.01.2020;29.02.2020;NaT

|col_A|col_B|col_C|Col_Date_1 |Col_Date_2 |Col_Date_3|
----------------------------------------------------
|57   |NaN  |60   |03.02.2020 |NaT        |06.07.2020|
|126  |8    |NaN  |03.02.2020 |04.03.2020 |06.07.2020|
|NaN  |45   |NaN  |30.01.2020 |29.02.2020 |29.06.2020|
|106  |83   |189  |NaT        |29.02.2020 |29.06.2020|
|NaN  |12   |84   |30.01.2020 |29.02.2020 |NaT       |

我是否必須遍歷所有列和行並清理“-”實體? 我在 Python 中仍然處於安靜的新手級別,不知道什么是最好的解決方案......

希望你們能幫助我。

用 nan 替換您的-值,然后解析日期

from io import StringIO
import pandas as pd

s = """col_A;col_B;col_C;Col_Date_1;Col_Date_2;Col_Date_3
57;-;60;03.02.2020;-;06.07.2020
126;8;-;03.02.2020;04.03.2020;06.07.2020
-;45;-;30.01.2020;29.02.2020;29.06.2020
106;83;189;-;29.02.2020;29.06.2020
-;12;84;30.01.2020;29.02.2020;-"""

df = pd.read_csv(StringIO(s), sep=';', na_values='-',
                 parse_dates=[3,4,5], dayfirst=True)

   col_A  col_B  col_C Col_Date_1 Col_Date_2 Col_Date_3
0   57.0    NaN   60.0 2020-02-03        NaT 2020-07-06
1  126.0    8.0    NaN 2020-02-03 2020-03-04 2020-07-06
2    NaN   45.0    NaN 2020-01-30 2020-02-29 2020-06-29
3  106.0   83.0  189.0        NaT 2020-02-29 2020-06-29
4    NaN   12.0   84.0 2020-01-30 2020-02-29        NaT

暫無
暫無

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

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