为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2023-10-11 21:18:34
我有两个片段给了我不同的输出。第一个片段为我提供了所需的输出,但我想用第二个片段复制相同的输出。片段 1:Top= pd.DataFrame({'A':['Hello', 'World']})insrt1= pd.DataFrame({'A': [f'Appended Item-1x']})df=Top['A'].append(insrt1['A'])print(df)出去:0               Hello1               World0    Appended Item-1xName: A, dtype: object由于 for 循环,第二个片段产生不同的输出。如何获得与片段 1 相同的输出?片段2Top= 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] = insrt2df=Top['A'].append(d['-OE1x-'])print(df)出去:     0                 A0  Hello               NaN1  World               NaN0    NaN  Appended Item-1x
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

导致不需要的输出的问题是由于您尝试将 full 附加Pandas.DataFrame到Pandas.Serieswith 语句


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原始索引,因为这将导致索引为的两行。00df


例如


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

将为您提供以下内容df:


                  A

0             Hello

1             World

2  Appended Item-1x

替代解决方案

由于您似乎实际上并没有使用每个Pandas.DataFrameind除了将它们作为新行附加到现有数据帧之外,因此重构您的代码可能是一个好主意,以便每个条目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.


查看完整回答
反对 回复 2023-10-11
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我认为只需将这些列表转换为系列并附加就可以了。


代码:


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


查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信