【问题标题】:How to add a column to a pandas dataframe without column? [duplicate]如何在没有列的熊猫数据框中添加列? [复制]
【发布时间】:2021-12-28 19:02:01
【问题描述】:

我有一个有 2 个“列”的 DataFrame。第一列好像没有列名,第二列名为Speed

这是一个 MRE:

from io import StringIO  # to read strings as files for read_csv

import pandas as pd

parts = [
    '[Level1]\nLocation = "London"\nType= "GTHY66"\n'
    'Date = "16-11-2021"\nEnergy level = "Critical zero"\n',
    '0.000   26.788\n0.027   26.807\n0.053   26.860'
]

lvl2_lines = "Speed\n" + parts[1]

df_level2 = pd.read_csv(StringIO(lvl2_lines), sep='\t')
print(df_level2.columns)
print(df_level2)

这是我执行打印语句时的输出:

Index(['Speed'], dtype='object')
            Speed
0  0.000   26.788
1  0.027   26.807
2  0.053   26.860

这是我想要的输出:

Index(['Power', 'Speed'], dtype='object')
   Power   Speed
0  0.000  26.788
1  0.027  26.807
2  0.053  26.860

【问题讨论】:

  • df.columns = ['Power', 'Speed'] ?
  • 看起来你可能有一个多索引?试试 df.reset_index()
  • @not_speshal 否,因为我不想重命名。我想添加,因为我只有一列
  • 我已经尝试过@splash58 的做法,但收到以下错误:ValueError: Length mismatch: Expected axis has 1 elements, new values have 2 elements
  • @HenryEcker 完成了

标签: python pandas dataframe


【解决方案1】:

你需要split字符串:

df[["Power", "Speed"]] = df["Speed"].str.split(expand=True).astype(float)

>>> df
    Speed  Power
0  26.788  0.000
1  26.807  0.027
2  26.860  0.053

【讨论】:

  • 我们可以只指定两个列名lvl2_lines = "Speed\n" + parts[1] -> lvl2_lines = "Power Speed\n" + parts[1] 然后就不需要事后拆分或更改dtype。但这会将问题推向拼写错误的领域。和df_level2 = pd.read_csv(StringIO(lvl2_lines), sep=r'\s+', engine='python') 处理混合间距。
  • 我明白你的意思。这是一种直接正确读取而不是稍后进行操作的巧妙方法。我在 OP 在他的问题中发布那一点之前回答了 :)
猜你喜欢
  • 2023-02-09
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2021-11-30
  • 2021-06-25
  • 2021-10-26
相关资源
最近更新 更多