数据帧列复制导致Nan

2024-09-29 18:46:40 发布

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

我试图将数据从一个Panadas数据帧复制到另一个Panadas数据帧,我得到了一些奇怪的结果。例如,如果我有:

[In]:
A = {'Types':['Falcon', 'Eagle', 'sparrow'], 
     'Speed':[100, 75, 50]}
df_A = pd.DataFrame(A)

df_B = pd.DataFrame()
df_B['Type'] = df_A['Types']
df_B['tags'] = ['FLCN', 'EGLE', 'SPRW']
df_B['ID'] = [543.76, 534.32, 645.25]

df_A['Tags'] = df_B['tags']
df_A['ID'] = df_B['ID']
df_A

我希望得到的是:

[Out]:
    Types   Speed   Tags    ID
0   Falcon  100     FLCN    543.76
1   Eagle   75      EGLE    534.32
2   sparrow 50      SPRW    645.25

但我得到的是:

[Out]:
    Types   Speed   Tags    ID
0   Falcon  100     FLCN    NaN
1   Eagle   75      EGLE    NaN
2   sparrow 50      SPRW    NaN

我试着在Jupyter笔记本上做这件事来解决问题,收到了一封TypeError: "'Method' object is not subscriptable"。以下是我收到的类型错误示例:

例2:

[In]:
df_A['ID'] = df_B['ID']

[Out]:
TypeError: 'method' object is not subscriptable

一旦我决定写一个问题,我就在Jupyter中为这些示例编写了代码,并在没有任何问题的情况下得到了预期的结果,所以我被难住了

编辑以添加: 我尝试使用以下方法作为解决方法:

[In]:
df_A['Tags'] = df_B['tags']
df_A = pd.concat(df_A, df_B['ID'], axis = 1)

但我还是得到了令人讨厌的结果。通过此示例代码,我最终得到:

[Out]:
    Types   Speed   Tags    ID
0   Falcon  100     FLCN    543.76
1   Eagle   75      EGLE    534.32
2   sparrow 50      SPRW    645.25

但当我使用较大的数据集时,结果如下所示:

[Out]:
    Types   Speed   Tags    ID
0   NaN     NaN     NaN     543.76
1   NaN     NaN     NaN     534.32
2   NaN     NaN     NaN     645.25
3   Falcon  100     FLCN    NaN
4   Eagle   75      EGLE    NaN
5   sparrow 50      SPRW    NaN

尽管在pd.concat中使用了“axis=1”作为参数


Tags: 数据iddftagsnanouttypespd
2条回答

用你的代码我得到了这个(Jupiter笔记本)。那么您的代码似乎工作正常

Types   Speed   Tags    ID
0   Falcon  100 FLCN    543.76
1   Eagle   75  EGLE    534.32
2   sparrow 50  SPRW    645.25

在每一步中,使用提供的代码,我也不会得到NaN

import pandas as pd


def print_df_A_df_B(stage, df_A, df_B):
    print(stage, "assignment","\ndf_A\n",df_A,"\ndf_B\n",df_B,"\n")
    pass

A = {'Types':['Falcon', 'Eagle', 'sparrow'], 
     'Speed':[100, 75, 50]}
df_A = pd.DataFrame(A)

df_B = pd.DataFrame()
df_B['Type'] = df_A['Types']
print_df_A_df_B("Type", df_A, df_B)
df_B['tags'] = ['FLCN', 'EGLE', 'SPRW']
df_B['ID'] = [543.76, 534.32, 645.25]

df_A['Tags'] = df_B['tags']
print_df_A_df_B("Tags", df_A, df_B)
df_A['ID'] = df_B['ID']
print_df_A_df_B("ID", df_A, df_B)

出去

Type assignment 
df_A
      Types  Speed
0   Falcon    100
1    Eagle     75
2  sparrow     50 
df_B
       Type
0   Falcon
1    Eagle
2  sparrow 

Tags assignment 
df_A
      Types  Speed  Tags
0   Falcon    100  FLCN
1    Eagle     75  EGLE
2  sparrow     50  SPRW 
df_B
       Type  tags      ID
0   Falcon  FLCN  543.76
1    Eagle  EGLE  534.32
2  sparrow  SPRW  645.25 

ID assignment 
df_A
      Types  Speed  Tags      ID
0   Falcon    100  FLCN  543.76
1    Eagle     75  EGLE  534.32
2  sparrow     50  SPRW  645.25 
df_B
       Type  tags      ID
0   Falcon  FLCN  543.76
1    Eagle  EGLE  534.32
2  sparrow  SPRW  645.25

也许可以尝试输入完整的代码:print(type(df_A['ID']), type(df_B['ID']))来检查两者是否都是pandas.core.series.Series

对于您报告的解决方法,可以将ignore_index=True添加为pd.concat([df_A, df_B['tags']], axis=1, ignore_index=True),然后修复列名

相关问题 更多 >

    热门问题