【问题标题】:Split a pandas dataframe into multiple columns将熊猫数据框拆分为多列
【发布时间】:2018-12-04 11:21:27
【问题描述】:

目标

我有一个如下所示的 pandas 数据框,并且想将它拆分到有空格的地方,将“命令”和浮点值分开。


数据框 - df 例如:

                                        0
...
432                   cl_bob_lower_amt "0"
433                      cl_bobamt_lat "0"
434                     cl_bobamt_vert "0"
435                        cl_bobcycle "2"
436        cl_viewmodel_shift_left_amt "0"
437       cl_viewmodel_shift_right_amt "0"
...

我的尝试

我已尝试使用here 描述的解决方案

import pandas as pd
file_ = open("E:\\Location\\Tree\\123456\\730\\local\\cfg\\myconfig.cfg", 'r')
content = file_.read()
paths = content.split("\n")
df = pd.DataFrame(paths)
df = pd.DataFrame(df.row.str.split(' ',1).tolist(),columns = ['command','value'])
print df

但是,我似乎收到以下错误:

AttributeError: 'DataFrame' object has no attribute 'row'

很遗憾,我无法确定发生这种情况的原因。


预期结果:

                  command              value
...
432                   cl_bob_lower_amt "0"
433                      cl_bobamt_lat "0"
434                     cl_bobamt_vert "0"
435                        cl_bobcycle "2"
436        cl_viewmodel_shift_left_amt "0"
437       cl_viewmodel_shift_right_amt "0"
...

最终我希望用户能够搜索命令并更改值。

【问题讨论】:

  • 确保它是数据框或系列
  • @Wen 已经不是数据框了吗?
  • @LearningToPython 它可以是一个数据框或一个系列。从您发布的内容来看,我们无法判断是哪一个。它看起来像一个系列,因为我们没有看到列标题。但你说这是一个数据框。这些不一致,Wen 要求您澄清一下。
  • @piRSquared 哦,好的。感谢您的澄清。目前,列标题只是0。 (已编辑)
  • 试试df = pd.DataFrame(df[0].str.split(' ',1).tolist(),columns = ['command','value'])(我刚刚将df.row(未知列)的引用替换为df[0](正确引用)

标签: python python-2.7 pandas dataframe


【解决方案1】:

我的猜测是您正在尝试调用不存在的 DF 的“ROW”属性。如果您尝试执行操作以选择行,我建议您使用 .itterows() 调用来循环仅在选择索引处您想要的行!这是我认为您正在努力实现的最佳解决方案:)

import pandas as pd

重新创建的虚拟数据

content = ['cl_bob_lower_amt "0"',
'cl_bobamt_lat "0"',
'cl_bobamt_vert "0"',
'cl_bobcycle "2"',
'cl_viewmodel_shift_left_amt "0"',
'cl_viewmodel_shift_right_amt "0"',]

创建的原始数据框

df = pd.DataFrame(content, columns = ['Value'])

通过对 Value.str 使用 .split 调用来创建一个新的数据框(或重新分配给现有的 DF)

split_df = pd.DataFrame(df.Value.str.split(" ").tolist(), columns=["Command", "Value"])

结果:

                        Command   Value
0              cl_bob_lower_amt   "0"
1                 cl_bobamt_lat   "0"
2                cl_bobamt_vert   "0"
3                   cl_bobcycle   "2"
4   cl_viewmodel_shift_left_amt   "0"
5  cl_viewmodel_shift_right_amt   "0"

【讨论】:

  • 感谢!谢谢。
【解决方案2】:
df['command'], df['value'] = df["0"].str.split().str

df

                                    0                       command value
432              cl_bob_lower_amt "0"              cl_bob_lower_amt   "0"
433                 cl_bobamt_lat "0"                 cl_bobamt_lat   "0"
434                cl_bobamt_vert "0"                cl_bobamt_vert   "0"
435                   cl_bobcycle "2"                   cl_bobcycle   "2"
436   cl_viewmodel_shift_left_amt "0"   cl_viewmodel_shift_left_amt   "0"
437  cl_viewmodel_shift_right_amt "0"  cl_viewmodel_shift_right_amt   "0"

如果列是整数0

df['command'], df['value'] = df[0].str.split().str

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2018-07-26
    相关资源
    最近更新 更多