我正在尝试将通过read_csv作为对象的一些列to_datetime转换为。到目前为止,列名称始终包含术语DATE,_DT或时间戳。如果它在列表中,我不确定如何正确地解决我要转换的系列。
.parent {
width: 100px;
height: 100px;
background: red;
}
.padding-example {
padding: 10px;
}
.margin-example {
margin: 10px;
}
这对于未知的字符串格式失败,我理解这是由引用列表中的字符串引起的。我不确定我需要在pd.to_datetime中放置什么来在循环的每次迭代中适当地引用Series。
答案 0 :(得分:3)
试试这个:
PATTERN = r'DATE|_DT|TIMESTAMP'
date_cols = [c for c in df.columns if re.search(PATTERN, c)]
for col_name in date_cols:
df[col_name] = pd.to_datetime(df[col_name])
如果您有列名列表,则迭代,更新每列。
答案 1 :(得分:2)
您可以使用正则表达式来查找日期列,然后使用apply
循环并转换它们:
实施例:
df = pd.DataFrame({
"DATE1":["2017-01-01"],
"XX_DT":["2017-01-01"],
"M_TIMESTAMP":["2017-01-01"],
"OTHERCOLUMN":[123],
})
import re
dt_cols = [col for col in df.columns if re.search("DATE|_DT|TIMESTAMP", col)]
df[dt_cols] = df[dt_cols].apply(pd.to_datetime)
df
# DATE1 M_TIMESTAMP OTHERCOLUMN XX_DT
#0 2017-01-01 2017-01-01 123 2017-01-01
df.dtypes
#DATE1 datetime64[ns]
#M_TIMESTAMP datetime64[ns]
#OTHERCOLUMN int64
#XX_DT datetime64[ns]
#dtype: object
答案 2 :(得分:2)
您可以在str
个对象以及pd.Index
个对象上使用pd.Series
字符串访问器。 pd.DataFrame.update
将使用传递的参数更新数据框df
。因此,我所做的是使用pd.Index.str.contains
确定的布尔数组切割数据帧,其正则值为'DATE|_DT|TIMESTAMP'
。然后我应用pd.to_datetime
并更新数据帧。
df.update(
df.loc[:, df.columns.str.contains('DATE|_DT|TIMESTAMP')].apply(pd.to_datetime)
)
答案 3 :(得分:1)
list(df)
,df.columns
或df
的工作方式同样出色。您也不需要使用正则表达式。检查每列是否包含任何已知模式就足够了。然后,只需将.to_datetime
应用于与日期模式匹配的列。
date_patterns = ('DATE', '_DT', 'TIMESTAMP')
date_cols = [col for col in df if any(pattern in col for pattern in date_patterns)]
df.loc[:, date_cols] = df.loc[:, date_cols].apply(lambda x: pd.to_datetime(x))
答案 4 :(得分:1)
更紧凑,我的男人
df.filter(regex ='DATE|_DT|TIMESTAMP', axis =1 ).apply(pd.to_datetime)