通过数据框在for循环中追加字符串

时间:2020-10-05 12:30:18

标签: python pandas

我有2个摘要,这些摘要给了我不同的输出。第一个代码段为我提供了所需的输出,但是我想与第二个代码段复制相同的输出。

代码段1:

Top= pd.DataFrame({'A':['Hello', 'World']})

insrt1= pd.DataFrame({'A': [f'Appended Item-1x']})

df=Top['A'].append(insrt1['A'])
print(df)

出局:

0               Hello
1               World
0    Appended Item-1x
Name: A, dtype: object

由于for循环,第二个代码段产生了不同的输出。如何获得与代码段1相同的输出?

Snippet2

Top= pd.DataFrame({'A':['Hello', 'World']})

Frst=['1','2']
Scnd=['x','y']

d={}

for num1 in Frst:
    for num2 in Scnd:
        key = f'-OE{num1}{num2}-'
        insrt2 = pd.DataFrame({'A': [f'Appended Item-{num1}{num2}']})
        d[key] = insrt2

df=Top['A'].append(d['-OE1x-'])
print(df)

出局:

     0                 A
0  Hello               NaN
1  World               NaN
0    NaN  Appended Item-1x

2 个答案:

答案 0 :(得分:1)

导致不希望有的输出的问题是由于您试图将完整的Pandas.DataFrame附加到带有该语句的Pandas.Series上而引起的

df=Top['A'].append(d['-OE1x-'])

如果将此行更改为:

df = Top.append(d['-OE1x-'])

df如下所示:

                  A
0             Hello
1             World
0  Appended Item-1x

您可能希望将ignore_index=True作为参数传递给对Pandas.DataFrame.append()的调用,以使包含Appended Item-1x的行被赋予顺序索引-即{{1}的原始索引}不包括在内,因为这将导致两行在0中具有索引0

例如

df

将为您提供以下df = Top.append(d['-OE1x-'], ignore_index=True)

df

替代解决方案

由于似乎您实际上并没有利用 A 0 Hello 1 World 2 Appended Item-1x 中的每个Pandas.DataFrame,而是将它们作为新行附加到现有数据帧之外,所以重构代码可能是一个好主意,以便d中的每个条目看起来像d而不是str: str。使用原始代码,您可以实现以下目标:

str: Pandas.DataFrame

这还将提供所需的import pandas as pd Top = pd.DataFrame({'A':['Hello', 'World']}) Frst = ['1','2'] Scnd = ['x','y'] d = { f'-OE{num1}{num2}-': f'Appended Item-{num1}{num2}' for num1 in Frst for num2 in Scnd } df = Top.append({'A': d['-OE1x-']}, ignore_index=True)

df

但是,与先前提供的答案(和您的原始代码)不同,由于 A 0 Hello 1 World 2 Appended Item-1x 不会不必要地被d实例填充,因此占用的内存将少得多。

答案 1 :(得分:0)

我认为只需将这些列表转换为序列并附加即可。

代码:

import pandas as pd
Top= pd.DataFrame({'A':['Hello', 'World']})
Frst=['1','2']
Scnd=['x','y']
l = (pd.Series(Frst), pd.Series(Scnd))
df = Top.A
for i in l:
    df = df.append(i)
print(df)

输出:

0    Hello
1    World
0        1
1        2
0        x
1        y
dtype: object