You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中pandas DataFrame拼接出NaN且head方法失效问题

问题原因及修复方案

两个异常的根因

  • 原df的Name列全为NaN:你在读取csv时通过index_col='Name'参数将Name列设置为了DataFrame的行索引,此时原df中已经不存在作为普通列的Name字段。你新建的new_row是把Name作为普通列传入的,pd.concat做拼接时会按列名对齐,原df没有对应Name普通列的位置就会被填充为NaN;后续你调用reset_index(drop=True)时直接丢弃了原df的行索引(也就是原本存储在索引位置的球员姓名),最终导致除了你新加的第一行,其余行的Name列全是空值。
  • 打印输出全部459行:df_new.head(5)的作用是返回一个只包含前5行的新DataFrame对象,你既没有将这个返回结果赋值给变量,也没有对它执行打印操作,最后执行的print(df_new)是直接打印完整的df_new对象,自然会输出全部行。

修正后的可运行代码

两种改法任选其一即可:

改法1:读取文件时不将Name设为索引(最贴合常规教程写法)

import pandas as pd
import numpy as np

# 读取时不指定index_col,让Name作为普通列存在
df = pd.read_csv('nba.csv')

df.head(10)

new_row = pd.DataFrame({'Name':'Geeks', 'Team':'Boston', 'Number':3,
                        'Position':'PG', 'Age':33, 'Height':'6-2',
                        'Weight':189, 'College':'MIT', 'Salary':99999},
                                                            index =[0])
df_new = pd.concat([new_row, df]).reset_index(drop = True)
# 直接打印head的返回结果
print(df_new.head(5))

改法2:保留原读取逻辑,调整新行构造方式

如果你确实需要在读取时把Name设为索引,可以按下面的方式写,拼接后再把索引转回普通列:

import pandas as pd
import numpy as np

df = pd.read_csv('nba.csv', index_col ='Name') 

df.head(10)

# 新行不传入Name列,把Name值作为索引传入
new_row = pd.DataFrame({'Team':'Boston', 'Number':3,
                        'Position':'PG', 'Age':33, 'Height':'6-2',
                        'Weight':189, 'College':'MIT', 'Salary':99999},
                                                            index =['Geeks'])
# 拼接后重置索引,把原来的Name索引转为普通列
df_new = pd.concat([new_row, df]).reset_index().rename(columns={'index':'Name'})
print(df_new.head(5))

运行修正后的代码,即可看到Name列正常显示所有值,且控制台仅打印前5行内容。

内容的提问来源于stack exchange,提问作者Shooting Stars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:03:51