【问题标题】:Parsing a datetime column to a particular format and saving to CSV将日期时间列解析为特定格式并保存为 CSV
【发布时间】:2018-02-18 10:49:35
【问题描述】:

我是 python 新手,正在尝试解析 csv 和日期时间。

我有一个格式如下的 csv -

Column-1      Column-2
Name1         03/09/2012 11:26:08
Name2         04/10/2011 11:26:08
Name3         13/11/2010 11:26:08
...           ...

我想解析这个 csv -> 读取 column2 -> 仅提取月份-年份 -> 存储回同一列和同一行

我能够解析 csv、读取数据、提取月份年份,但不确定如何识别同一行并将其存储回来。

基本上输出应该是同一个csv被修改为-

Column-1      Column-2
Name1         09/2012
Name2         10/2011
Name3         11/2010
...           ...

【问题讨论】:

  • 你能显示你的代码来提取月-年
  • 您将无法就地修改文件。将修改后的数据写入新文件(如果需要,然后将其复制到原始文件上)。
  • 你有熊猫吗?
  • @cᴏʟᴅsᴘᴇᴇᴅ 是的,我有熊猫
  • 您没有识别该行。您编写一个新文件,名称相同或不同。如果您不想丢失行,则使用 dropna() 时会出现唯一的问题

标签: python pandas csv datetime dataframe


【解决方案1】:

您在读取 ​​CSV 时添加 parse_dates 参数,然后使用 .dt.strftime 转换为您想要的格式。

df = pd.read_csv(...., sep='\s{2,}', engine='python', 
                           parse_dates=['Column-2'], dayfirst=True)
df['Column-2'] = df['Column-2'].dt.strftime('%m/%Y')
df

  Column-1 Column-2
0    Name1  09/2012
1    Name2  10/2011
2    Name3  11/2010

df.to_csv(..., sep='\t')

请注意,由于您的日期格式为 DD/MM/YYYY,因此必须传递额外的 dayfirst=True 参数。

【讨论】:

  • 我觉得自己很笨。 sep 是什么?
  • @roganjosh 列分隔符,指定为正则表达式。我不想做delim_whitespace=True,因为它可能会错误地拆分日期列。
  • 我知道它是用于分隔符,但我无法理解它的作用。所以它只是为了分隔 2 个或更多连续的空白块?
  • @roganjosh 正确。 OP的文件完全有可能是TSV,在这种情况下sep='\t'会更合适。我只是这样猜测的。
  • 在某个时候我会学习正则表达式。现在它看起来总是完全陌生的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多