更改从 CSV 上传的 Pandas DataFrame 上的数据类型 - 主要是对象到日期时间
Changing data types on Pandas DataFrame uploaded from CSV - mainly Object to Datetime
我正在处理从 CSV 上传的数据框,我尝试更改 CSV 文件中键入的数据并保存它,但由于某种原因它不允许我保存它,因此当我上传它时Pandas 日期和时间列显示为对象。
我尝试了几种将它们转换为日期时间的方法,但没有取得很大成功:
1) df['COLUMN'] = pd.to_datetime(df['COLUMN'].str.strip(), format='%m/%d/%Y')
给我错误:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
2) 在开头定义 dtypes 然后在 read_csv
命令中使用它 - 也给了我一个错误,因为它不接受 datetime 但只接受 string/int.
有些列我想有日期的日期时间格式,比如:2019/1/1,还有一些时间:20:00:00
您知道将这些数据类型对象列转换为日期或时间的有效方法吗?
根据讨论,我从您提供的link下载了数据集,并通过pandas阅读了它。我拿了一个专栏和其中的一部分;它有日期并像你一样使用 pandas 数据时间模块。这样我就可以使用你提到的脚本了。
#import necessary library
import numpy as np
import pandas as pd
#load the data into csv
data = pd.read_csv("NYPD_Complaint_Data_Historic.csv")
#take one column which contains the datatime as an example
dte = data['CMPLNT_FR_DT']
# =============================================================================
# I will try to take a part of the data from dte which contains the
# date time and convert it to date time
# =============================================================================
from pandas import datetime
test_data = dte[0:10]
df1 = pd.DataFrame(test_data)
df1['new_col'] = pd.to_datetime(df1['CMPLNT_FR_DT'])
df1['year'] = [i.year for i in df1['new_col']]
df1['month'] = [i.month for i in df1['new_col']]
df1['day'] = [i.day for i in df1['new_col']]
#The way you used to convert the data also works
df1['COLUMN'] = pd.to_datetime(df1['CMPLNT_FR_DT'].str.strip(), format='%m/%d/%Y')
这可能是您获取数据的方式。您可以看到此附件的输出。由于结果可以存储在数据框中,因此以任何格式保存都不是问题。如果我理解正确并且对您有所帮助,请告诉我。图中没有显示月份,但你可以得到。
我正在处理从 CSV 上传的数据框,我尝试更改 CSV 文件中键入的数据并保存它,但由于某种原因它不允许我保存它,因此当我上传它时Pandas 日期和时间列显示为对象。 我尝试了几种将它们转换为日期时间的方法,但没有取得很大成功:
1) df['COLUMN'] = pd.to_datetime(df['COLUMN'].str.strip(), format='%m/%d/%Y')
给我错误:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
2) 在开头定义 dtypes 然后在 read_csv
命令中使用它 - 也给了我一个错误,因为它不接受 datetime 但只接受 string/int.
有些列我想有日期的日期时间格式,比如:2019/1/1,还有一些时间:20:00:00
您知道将这些数据类型对象列转换为日期或时间的有效方法吗?
根据讨论,我从您提供的link下载了数据集,并通过pandas阅读了它。我拿了一个专栏和其中的一部分;它有日期并像你一样使用 pandas 数据时间模块。这样我就可以使用你提到的脚本了。
#import necessary library
import numpy as np
import pandas as pd
#load the data into csv
data = pd.read_csv("NYPD_Complaint_Data_Historic.csv")
#take one column which contains the datatime as an example
dte = data['CMPLNT_FR_DT']
# =============================================================================
# I will try to take a part of the data from dte which contains the
# date time and convert it to date time
# =============================================================================
from pandas import datetime
test_data = dte[0:10]
df1 = pd.DataFrame(test_data)
df1['new_col'] = pd.to_datetime(df1['CMPLNT_FR_DT'])
df1['year'] = [i.year for i in df1['new_col']]
df1['month'] = [i.month for i in df1['new_col']]
df1['day'] = [i.day for i in df1['new_col']]
#The way you used to convert the data also works
df1['COLUMN'] = pd.to_datetime(df1['CMPLNT_FR_DT'].str.strip(), format='%m/%d/%Y')
这可能是您获取数据的方式。您可以看到此附件的输出。由于结果可以存储在数据框中,因此以任何格式保存都不是问题。如果我理解正确并且对您有所帮助,请告诉我。图中没有显示月份,但你可以得到。