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

Pandas处理学术CSV数据时触发ValueError:EDAT轴未被识别

解决你的Pandas ValueError问题及代码优化

我一眼就发现问题出在dropna()的调用方式上了!

错误原因分析

你写的代码里:

publication_data.dropna('EDAT', inplace=True)

Pandas的dropna()函数第一个参数是axis(用来指定按行/列删除,合法值是0/1或者'index'/'columns'),你直接传'EDAT'会被当成axis参数的值,而EDAT根本不是合法的axis选项,所以触发了ValueError: No axis named EDAT for object type <class 'type'>。

正确的用法是通过subset参数来指定要检查缺失值的列名,修改这一行即可解决核心报错。

额外的代码优化点

除了这个错误,你的代码还有两处逻辑问题,会导致统计结果完全错误:

  1. 作者拆分逻辑错误:如果FAU列的作者是用分隔符(比如分号、逗号)拼接的字符串,你当前的写法会把每个字符拆出来当成单独的作者,而不是拆分完整的作者名。
  2. 关键词拆分逻辑错误:同样,OT列的关键词如果是拼接字符串,当前写法会把每个字符拆分,导致关键词统计混乱。

修正后的完整代码

from collections import Counter
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_style("white")
# Windows路径用原始字符串避免反斜杠转义问题
publication_data = pd.read_csv(r"C:\Users\jcst\Desktop\Private\Python data\My_Collection_test2.csv")

# 修正dropna调用:通过subset指定要检查缺失值的列
publication_data.dropna(subset=['EDAT'], inplace=True)
publication_data["Year"] = (
    publication_data["EDAT"].astype(str).str[0:4].astype(int)
)

plt.figure(figsize=(10, 10), dpi=600)

# Top 10 authors - 修正作者拆分逻辑(假设FAU列用分号分隔,可根据实际调整)
plt.subplot(2, 2, 1)
authors_flat = [
    author.strip() for authors in publication_data["FAU"].dropna() 
    for author in authors.split(';')
]
top10authors = pd.DataFrame.from_records(
    Counter(authors_flat).most_common(10), columns=["Name", "Count"]
)
sns.barplot(x="Count", y="Name", data=top10authors, palette="RdBu_r")
plt.title("Top 10 Authors")

# Publications over Time - 增加年份排序避免折线图乱序
plt.subplot(2, 2, 2)
yearly = pd.DataFrame(publication_data["Year"].value_counts().reset_index())
yearly.columns = ["Year", "Count"]
yearly = yearly.sort_values("Year")
sns.lineplot(x="Year", y="Count", data=yearly)
plt.title("Publications over Time")
plt.xlim([1986, 2020])

# TOP 10 Journals
plt.subplot(2, 2, 3)
top10journals = pd.DataFrame.from_records(
    Counter(publication_data["TA"]).most_common(10), columns=["Journal", "Count"],
)
sns.barplot(x="Count", y="Journal", data=top10journals, palette="RdBu_r")
plt.title("Top 10 Journals")

# Top associated keywords - 修正关键词拆分逻辑(假设OT列用分号分隔)
plt.subplot(2, 2, 4)
flat_kw = [
    kw.strip().lower() for kws in publication_data["OT"].dropna() 
    for kw in kws.split(';')
]
top10kw = pd.DataFrame.from_records(
    Counter(flat_kw).most_common(10), columns=["Keyword", "Count"]
)
sns.barplot(x="Count", y="Keyword", data=top10kw, palette="RdBu_r")
plt.title("Top 10 Associated Keywords")

plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0.3, wspace=0.3)
plt.show()

额外说明

  • 作者和关键词的分隔符请根据你CSV文件的实际格式调整(比如有的学术平台用逗号、有的用分号);
  • 年度发文量部分增加了排序,避免折线图因为年份乱序导致显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:51:28