如何从自定义值创建 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)))
当我 运行 上述代码时,我将所有值作为一个列获取。是否有可能以正确的表格格式获取它。
你不应该在一个循环中从 .append
到 DataFrame
,那样效率很低。做类似的事情:
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)
我正在阅读一个文本文件,每一行都有多个值。我正在使用函数解析根据要求解析它们。
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)))
当我 运行 上述代码时,我将所有值作为一个列获取。是否有可能以正确的表格格式获取它。
你不应该在一个循环中从 .append
到 DataFrame
,那样效率很低。做类似的事情:
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)