我正在阅读一个文本文件,每行都有多个值。我正在使用函数解析基于需求解析它们。
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)))
当我运行上面的代码时,我将所有值都作为单个列。是否有可能以适当的表格格式获取它。
答案 0 :(得分:4)
你不应该在一个循环中.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
期望另一个数据帧,并且它会附加该另一个数据帧的行。它将列表解释为一堆单行。请注意,如果您将列表构造为具有“行”,则它将按预期工作。但是你不应该在这里使用.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
答案 1 :(得分:0)
Umaformarápidodefazer 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笔记本上的警告:
import warnings
warnings.filterwarnings('ignore')
答案 2 :(得分:0)
除了@ juanpa.arrilaga,
看来你确实有一个结构化文件,只需要文件中的第1个和第5个项目。
加载并使用drop
df = pd.read_csv('file')
df.drop([columns],axis = 1)