我正在尝试在包含日期列的.csv文件中使用read_csv
。问题在于日期列是外语(罗马尼亚语),其条目为:
'2017年9月26日'
'13 iulie 2017'
等如何将其很好地解析为具有美国日期格式的熊猫数据框?
答案 0 :(得分:3)
您可以为该列传递一个转换器:
df = pd.read_csv(myfile, converters={'date_column': foreign_date_converter})
但是首先,您必须定义转换器以执行所需的操作。这种方法使用语言环境操作:
def foreign_date_converter(text):
# Resets locale to "ro_RO" to parse romanian date properly
# (non thread-safe code)
loc = locale.getlocale(locale.LC_TIME)
locale.setlocale(locale.LC_TIME, 'ro_RO')
date = datetime.datetime.strptime(text '%d %b %Y').date()
locale.setlocale(locale.LC_TIME, loc) # restores locale
return date
答案 1 :(得分:1)
使用dateparser模块。
import dateparser
df = pd.read_csv('yourfile.csv', parse_dates=['date'], date_parser=dateparser.parse)
在parse_dates
参数中输入日期列名称。我只是假设它为date
您可能会有这样的输出:
date
0 2017-09-26
1 2017-07-13
如果要更改格式,请使用strftime
strftime
df['date'] = df.date.dt.strftime(date_format = '%d %B %Y')
输出:
date
0 26 September 2017
1 13 July 2017
答案 2 :(得分:0)
最简单的解决方案是使用str.replace(old, new)
函数的12倍。
虽然不漂亮,但是如果您刚刚构建了函数:
def translater(date_string_with_exatly_one_date):
date_str = date_string_with_exatly_one_date
date_str = date_str.replace("iulie", "july")
date_str = date_str.replace("septembrie", "september")
#do this 10 more times with the right translation
return date_str
现在,您只需为每个条目调用它。之后,您可以像处理美国日期字符串一样处理它。这不是很有效,但是可以完成工作,您不必搜索特殊的库。