如何从自定义值创建 DataFrame

How to create a DataFrame from custom values

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

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)))

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

你不应该在一个循环中从 .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 需要 另一个数据帧 ,并且附加了 其他数据框。它将列表解释为一堆单行。所以请注意,如果您将列表结构化为 "rows",它将按预期工作。但是无论如何你都不应该在这里使用 .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

Uma forma rapida 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')

除了@juanpa.arrilaga,

看来您确实有一个结构化文件,只需要文件中的第 1、3 和 5 项。

加载并使用 drop

df = pd.read_csv('file')

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