【问题标题】:Create Pandas DataFrame from space separated String从空格分隔的字符串创建 Pandas DataFrame
【发布时间】:2021-05-06 23:19:02
【问题描述】:

我有一个字符串:

              C1     C2                       DATE     C4     C5         C6      C7
0            0.0    W04  2021-01-08 00:00:00+00:00      E    EUE         C1     157
1            0.0    W04  2021-01-08 00:00:00+00:00      E    AEU         C1     157
2            0.0    W04  2021-01-01 00:00:00+00:00      E   SADA         H1     747
3            0.0    W04  2021-01-04 00:00:00+00:00      E   SSEA         H1     747
4            0.0    W04  2021-01-05 00:00:00+00:00      E   GPEA         H1     747

它看起来确实像 Pandas DataFrame,因为它来自一个。 我需要将其转换为 Pandas DataFrame。

我尝试了以下方法:

pd.read_csv(StringIO(string_file),sep=r"\s+")

但它与列混淆并将 DATE 列分成 2 列。

【问题讨论】:

  • 使用sep=r"\s\s+"
  • @SayandipDutta 谢谢你,它适用于身体,但标题仍然搞砸了。它看起来右对齐并以一个空格分隔
  • 我复制了这些数据并尝试使用StringIOsep=r'\s\s+' 读取,我无法重现您的问题。对我来说很好。
  • pandas 有read_fwf,您可以在其中指定列的断点。这看起来像是适合您的用例的解决方案。

标签: python pandas string dataframe


【解决方案1】:

首先,重新创建字符串:

s = """
              C1     C2                       DATE     C4     C5         C6      C7
0            0.0    W04  2021-01-08 00:00:00+00:00      E    EUE         C1     157
1            0.0    W04  2021-01-08 00:00:00+00:00      E    AEU         C1     157
2            0.0    W04  2021-01-01 00:00:00+00:00      E   SADA         H1     747
3            0.0    W04  2021-01-04 00:00:00+00:00      E   SSEA         H1     747
4            0.0    W04  2021-01-05 00:00:00+00:00      E   GPEA         H1     747
"""

现在,您可以使用Pandas.read_csv 导入缓冲区:

from io import StringIO
df = pd.read_csv(StringIO(s), sep=r"\s\s+")

据我所知,这正是您正在寻找的 DataFrame:

您可能还想将DATE 列转换为datetime 值:

df['DATE'] = df.DATE.astype('datetime64')

【讨论】:

  • 遵循此方法时要考虑的一点是,如果列名长于输入的数据,您可能会遇到问题。在这种情况下,您可能必须在标题行中手动添加一些空格,以使列与数据正确对齐。
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多