通过for循环中的数据帧追加字符串

2024-10-01 22:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个片段,它们给了我不同的输出。第一个代码段提供了所需的输出,但我想用第二个代码段复制相同的输出

片段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相同的输出

片段2

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

Tags: hellodataframedfforworldtop代码段nan
2条回答

我认为只要将这些列表转换为序列并附加就可以了

代码:

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

导致不希望的输出的问题来自这样一个事实:您正试图用语句将完整的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的行提供一个顺序索引,即不包括0的原始索引,因为这将导致在df中有两行具有0索引

例如

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

将为您提供以下df

                  A
0             Hello
1             World
2  Appended Item-1x

替代解决方案

由于似乎除了将它们作为新行附加到现有数据帧之外,实际上没有使用d中的每个Pandas.DataFrame,因此重构代码以使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不会被Pandas.DataFrame的实例不必要地填充

相关问题 更多 >

    热门问题