【问题标题】:How to create a DataFrame from custom values如何从自定义值创建 DataFrame
【发布时间】:2018-04-09 09:48:34
【问题描述】:

我正在阅读一个文本文件,每一行都有多个值。我正在使用函数解析根据需求解析它们。

def parse(line):
    ......
    ......
    return line[0],line[2],line[5]

我想创建一个数据框,每行作为一行,三个返回值作为列

df = pd.DataFrame()

with open('data.txt') as f:
    for line in f:
       df.append(line(parse(line)))

当我运行上述代码时,我将所有值作为一列。是否有可能以适当的表格格式获取它。

【问题讨论】:

标签: python pandas dataframe data-cleaning


【解决方案1】:

你不应该在一个循环中 .appendDataFrame,这无论如何都是非常低效的。执行以下操作:

colnames = ['col1','col2','col3'] # or whatever you want
with open('data.txt') as f:
    df = pd.DataFrame([parse(l) for l in f], columns=colnames)

注意,根本问题是pd.DataFrame.append 需要另一个数据帧,它会附加那个其他数据帧的。它将列表解释为一堆单行。所以请注意,如果您将列表构造为具有“行”,它将按预期工作。但无论如何,你不应该在这里使用.append

In [6]: df.append([1,2,3])
Out[6]:
   0
0  1
1  2
2  3

In [7]: df = pd.DataFrame()

In [8]: df.append([[1, 2, 3]])
Out[8]:
   0  1  2
0  1  2  3

【讨论】:

  • 有没有办法重命名列名?
  • @ankitbiradar 是的,最简单的方法是使用 ..., columns=['name1','name2','name3'] 将名称传递给构造函数
【解决方案2】:

Uma forma rápida de fazer isso (TL;DR):

创建新列:

  `df['com_zeros'] = '0'`

应用条件::

for b in df.itertuples():
    df.com_zeros[b.Index] = '0'+str(b.battles) if b.battles<9 else str(b.battles)

结果:

df
     regiment company deaths  battles size com_zeros
0  Nighthawks     1st    kkk        5    l        05
1  Nighthawks     1st     52       42   ll        42
2  Nighthawks     2nd     25        2    l        02
3  Nighthawks     2nd    616        2    m        02

参见https://repl.it/JHW6 的示例。

观察: 在 repl.it 上运行的示例似乎挂了,但事实并非如此,在 repl.it 上加载 pandas 总是很耗时。

要抑制 jupyter notebook 上的警告:

import warnings
warnings.filterwarnings('ignore')

【讨论】:

  • 另外,这绝对是不是 uma forma rápida de fazer isso。你可能只想要df['com_zeros'] = df.battles.astype(str).str.zfill(2)
【解决方案3】:

除了@juanpa.arrilaga,

您似乎确实有一个结构化文件,并且只需要文件中的第 3 项和第 5 项。

加载它并使用 drop

df = pd.read_csv('文件')

df.drop([列],axis = 1)

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多