[英]datetime dtypes in pandas read_csv
我正在讀取具有多個日期時間列的 csv 文件。 我需要在讀取文件時設置數據類型,但日期時間似乎是一個問題。 例如:
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = ['datetime', 'datetime', 'str', 'float']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
運行時報錯:
類型錯誤:無法理解數據類型“日期時間”
事后轉換列,通過 pandas.to_datetime() 不是一個選項,我不知道哪些列將是 datetime 對象。 該信息可以更改並且來自通知我的 dtypes 列表的任何內容。
或者,我嘗試使用 numpy.genfromtxt 加載 csv 文件,在該函數中設置 dtypes,然后轉換為 pandas.dataframe 但它會使數據出現亂碼。 任何幫助是極大的贊賞!
沒有為 read_csv 設置 datetime dtype,因為 csv 文件只能包含字符串、整數和浮點數。
將 dtype 設置為 datetime 將使 Pandas 將日期時間解釋為一個對象,這意味着您最終會得到一個字符串。
pandas.read_csv()
函數有一個名為parse_dates
的關鍵字參數
使用它,您可以使用默認的date_parser
( dateutil.parser.parser
) 即時將字符串、浮點數或整數轉換為日期dateutil.parser.parser
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = {'col1': 'str', 'col2': 'str', 'col3': 'str', 'col4': 'float'}
parse_dates = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)
這將導致熊貓將col1
和col2
讀取為字符串,它們很可能是(“2016-05-05”等),並且在讀取字符串后,每列的 date_parser 將對該字符串進行操作並返回任何內容函數返回。
pandas.read_csv()
函數還有一個名為date_parser
的關鍵字參數
將此設置為 lambda 函數將使該特定函數用於解析日期。
你必須給它函數,而不是函數的執行,因此這是正確的
date_parser = pd.datetools.to_datetime
這是不正確的:
date_parser = pd.datetools.to_datetime()
pd.datetools.to_datetime
已重新定位到date_parser = pd.to_datetime
謝謝@stackoverYC
有一個parse_dates
的參數read_csv
它允許您定義你想要的日期或日期時間處理的列的名稱:
date_cols = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=date_cols)
您可以嘗試傳遞實際類型而不是字符串。
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
但是,如果沒有您的任何數據可以修補,就很難診斷出這一點。
實際上,您可能希望熊貓將日期解析為時間戳,因此可能是:
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=True)
我嘗試使用 dtypes=[datetime, ...] 選項,但是
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
我遇到了以下錯誤:
TypeError: data type not understood
我必須做的唯一改變是用 datetime.datetime 替換 datetime
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime.datetime, datetime.datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
我的解決方法是將其加載為默認類型,然后向下一行使用 pandas.to_datetime() 函數。
df[target_col] = pd.to_datetime(df[target_col])
我使用了以下代碼並且它有效:
headers = ['col1', 'col2', 'col3', 'col4']
df=pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=['col1', 'col2'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.