嗨,我正在使用pandas将列转换为月份.当我读取我的数据时,它们就是对象:
Date object
dtype: object
Run Code Online (Sandbox Code Playgroud)
所以我首先让它们到达约会时间,然后尝试将它们作为月份:
import pandas as pd
file = '/pathtocsv.csv'
df = pd.read_csv(file, sep = ',', encoding='utf-8-sig', usecols= ['Date', 'ids'])
df['Date'] = pd.to_datetime(df['Date'])
df['Month'] = df['Date'].dt.month
Run Code Online (Sandbox Code Playgroud)
如果这有帮助:
In [10]: df['Date'].dtype
Out[10]: dtype('O')
Run Code Online (Sandbox Code Playgroud)
所以,我得到的错误是这样的:
/Library/Frameworks/Python.framework/Versions/2.7/bin/User/lib/python2.7/site-packages/pandas/core/series.pyc in _make_dt_accessor(self)
2526 return maybe_to_datetimelike(self)
2527 except Exception:
-> 2528 raise AttributeError("Can only use .dt accessor with datetimelike "
2529 "values")
2530
AttributeError: Can only use .dt accessor with datetimelike values
Run Code Online (Sandbox Code Playgroud)
编辑:
日期列如下:
0 2014-01-01
1 2014-01-01
2 2014-01-01
3 2014-01-01
4 2014-01-03
5 2014-01-03
6 2014-01-03
7 2014-01-07
8 2014-01-08
9 2014-01-09
Run Code Online (Sandbox Code Playgroud)
你有什么想法?非常感谢你!
EdC*_*ica 49
这里你的问题是to_datetime
无声失败所以dtype仍然是str/object
,如果你设置param errors='coerce'
然后如果任何特定字符串的转换失败,那么这些行设置为NaT
.
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
Run Code Online (Sandbox Code Playgroud)
因此,您需要找出这些特定行值的错误.
查看文档
小智 9
您的问题是“日期”的 dtype 仍为 str/object。使用parse_dates
时可以使用该参数read_csv
import pandas as pd
file = '/pathtocsv.csv'
df = pd.read_csv(file, sep = ',', parse_dates= [col],encoding='utf-8-sig', usecols= ['Date', 'ids'],)
df['Month'] = df['Date'].dt.month
Run Code Online (Sandbox Code Playgroud)
parse_dates : bool 或 int 或名称列表或列表或字典列表,默认为 False
行为如下:
- 布尔值。如果为 True -> 尝试解析索引。
- int 或名称列表。例如,如果 [1, 2, 3] -> 尝试将第 1、2、3 列解析为单独的日期列。
- 列表列表。例如,如果 [[1, 3]] -> 合并第 1 列和第 3 列并解析为单个日期列。
- dict,例如 {'foo' : [1, 3]} -> 将第 1、3 列解析为日期并调用结果 'foo'
如果列或索引无法表示为日期时间数组,例如由于无法解析的值或时区的混合,则该列或索引将作为对象数据类型原封不动地返回。对于非标准日期时间解析,请使用
pd.to_datetime
afterpd.read_csv
。要解析具有混合时区的索引或列,请指定date_parser
为部分应用pandas.to_datetime()
的utc=True
. 有关更多信息,请参阅解析具有混合时区的 CSV。注意:iso8601 格式的日期存在快速路径。
这个问题的相关案例是“整数或名称列表”。
col 是 'Date' 的列索引,它被解析为一个单独的日期列。
小智 6
首先,您需要定义日期列的格式。
df['Date'] = pd.to_datetime(df.Date, format='%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
对于您的案例库格式可以设置为;
df['Date'] = pd.to_datetime(df.Date, format='%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
之后,您可以按如下方式设置/更改所需的输出;
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42527 次 |
最近记录: |