【问题标题】:Convenient way to deal with ValueError: cannot reindex from a duplicate axis处理 ValueError 的便捷方法:无法从重复轴重新索引
【发布时间】:2019-01-27 22:45:40
【问题描述】:

我可以搜索显示此错误消息“原因”的建议,但不能搜索如何解决它 -

每次我尝试通过连接 2 个现有列中的字符串值来向 pandas 数据框添加新列时都会遇到此问题。

例如:

wind['timestamp'] = wind['DATE (MM/DD/YYYY)'] + ' ' + temp['stamp']

如果与 ' ' 合并的第一项和第二项都是单独的数据框/系列,则它可以工作。

这些尝试是将日期和时间合并到同一列中,以便它们被 pandas 库识别为日期时间戳。

我不确定我是否错误地使用了该命令,或者它是否是 pandas 库功能在内部受到限制,因为它不断返回 duplicate axis 错误消息。我知道后者不太可能哈哈哈......

我能听到一些快速简便的解决方案吗?

我的意思是,我认为求和/减法以及数据框中列值之间的所有这些操作都非常简单。放在桌子上应该不会太难吧?

【问题讨论】:

标签: python pandas datetime indexing concat


【解决方案1】:

系列之间的操作需要不重复的索引,否则 Pandas 不知道如何在计算中对齐值。目前您的数据并非如此。

如果您确定您的系列按位置对齐,您可以在每个数据帧上调用reset_index

wind = pd.DataFrame({'DATE (MM/DD/YYYY)': ['2018-01-01', '2018-02-01', '2018-03-01']})
temp = pd.DataFrame({'stamp': ['1', '2', '3']}, index=[0, 1, 1])

# ATTEMPT 1: FAIL
wind['timestamp'] = wind['DATE (MM/DD/YYYY)'] + ' ' + temp['stamp']
# ValueError: cannot reindex from a duplicate axis

# ATTEMPT 2: SUCCESS
wind = wind.reset_index(drop=True)
temp = temp.reset_index(drop=True)
wind['timestamp'] = wind['DATE (MM/DD/YYYY)'] + ' ' + temp['stamp']

print(wind)

  DATE (MM/DD/YYYY)     timestamp
0        2018-01-01  2018-01-01 1
1        2018-02-01  2018-02-01 2
2        2018-03-01  2018-03-01 3

【讨论】:

  • 天哪,你太棒了。我意识到我没有reset_index temp 系列。最好也检查最后一个文件。谢谢!
猜你喜欢
  • 2015-02-26
  • 2016-05-17
  • 2020-05-23
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2021-10-03
相关资源
最近更新 更多