我有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
答案 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