python - 数据框列复制导致 Nan
问题描述
我正在尝试将数据从一个 Panadas DataFrame 复制到另一个,我得到了一些奇怪的结果。例如,如果我有:
[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 Notebook 中执行此操作以排除故障并收到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' 作为参数。
解决方案
在每一步,使用提供的代码,我也没有得到 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)
修复列名。
推荐阅读
- html - 如何在网页 CSS 中定位元素
- css - 有没有办法使用 @import 来保存 css 文件缓存?
- html - 加载时我的网站上的图片格式不正确
- facebook - Facebook bot with Php (#100) 尝试访问节点类型(页面)上不存在的字段(消息)
- javascript - 从 Webpack 3 迁移到 Webpack 4 - babel-loader ReferenceError: Unknown plugin "syntax-dynamic-import"
- c++ - -lclsntsh 在与 oracle 程序的 c++ 连接中找不到
- android - 如何减少水平平面列表中项目之间的空间
- python-3.x - 为每个子文件夹制作字典
- amazon-web-services - 是一种提取 Amazon Kinesis firehose 中托管的服务使用的 IP 范围的方法吗?
- java - 如何防止 JpaRepository saveAndFlush 生成删除 sql 请求