【问题标题】:How to concat a series to a pandas dataframe in pyhton?如何在 python 中将系列连接到 pandas 数据框?
【发布时间】:2022-12-03 13:25:36
【问题描述】:
我想遍历一个数据框行并将该行连接到一个不同的数据框,基本上是用一些行构建一个不同的数据框。
例如:
`IPCSection and IPCClass Dataframes
allcolumns = np.concatenate((IPCSection.columns, IPCClass.columns), axis = 0)
finalpatentclasses = pd.DataFrame(columns=allcolumns)
for isec, secrow in IPCSection.iterrows():
for icl, clrow in IPCClass.iterrows():
if (secrow[0] in clrow[0]):
pdList = [finalpatentclasses, pd.DataFrame(secrow), pd.DataFrame(clrow)]
finalpatentclasses = pd.concat(pdList, axis=0, ignore_index=True)
display(finalpatentclasses)
The output is:
我希望 nan 值消失并将所有数据移动到正确的列下。我试过 axis = 1 但弄乱了列名。 Append 也不起作用,所有值也都对角放置在具有 nan 值的表中。
【问题讨论】:
标签:
python
dataframe
loops
【解决方案1】:
当前实现的问题是pd.concat 被axis=0 和ignore_index=True 调用,导致secrow 和clrow 的值被垂直连接并且原始索引被忽略。这会导致值与最终数据帧的列不对齐,如输出所示。
要解决此问题,您可以创建一个与最终数据帧具有相同列的新数据帧,然后将 secrow 和 clrow 中的值分配给新数据帧中的相应列。之后,您可以像以前一样使用 pd.concat 函数和 axis=0 将新数据帧附加到最终数据帧。
这是应该产生所需输出的代码的修改版本:
allcolumns = np.concatenate((IPCSection.columns, IPCClass.columns), axis=0)
finalpatentclasses = pd.DataFrame(columns=allcolumns)
for isec, secrow in IPCSection.iterrows():
for icl, clrow in IPCClass.iterrows():
if (secrow[0] in clrow[0]):
# Create a new dataframe with the same columns as the final dataframe
newrow = pd.DataFrame(columns=allcolumns)
# Assign the values from secrow and clrow to the appropriate columns in the new dataframe
newrow[IPCSection.columns] = secrow.values
newrow[IPCClass.columns] = clrow.values
# Append the new dataframe to the final dataframe
finalpatentclasses = pd.concat([finalpatentclasses, newrow], axis=0)
display(finalpatentclasses)
这应该会产生一个最终的数据框,其中 secrow 和 clrow 的值在正确的列下水平连接,没有 nan 值。