我有一个pandas.DataFrame
,由于文件(.csv)的命名不一致,它有多余的列名。这将导致列的值大多为NaN
Bike # Bikenumber Bike# SubscriberType SubscriptionType
NaN NaN W20848 NaN Subscriber
NaN NaN W20231 NaN Subscriber
NaN NaN W00785 NaN Subscriber
NaN NaN W00126 NaN Subscriber
NaN NaN W20929 NaN Casual
有没有办法创建一个新列并从多个有值的列中填充它?如果不止一列不是NaN
,我可以选择从哪个列中提取值吗
Bike# Bikenumber Bike # Selected_Num
number1 number2 NaN number2
当我尝试用一列来填充时,我可以得到这个
sample['Bike_Num'] = sample['Bike #'].fillna(sample['Bike#'])
print(sample)
Bike # Bikenumber Bike# SubscriberType SubscriptionType Bike_Num
NaN NaN W20848 NaN Subscriber W20848
NaN NaN W20231 NaN Subscriber W20231
NaN NaN W00785 NaN Subscriber W00785
NaN NaN W00126 NaN Subscriber W00126
NaN NaN W20929 NaN Casual W20929
这失败了
sample['Bike_Num'] = sample['Bike #'].fillna(sample['Bike#'], sample['Bikenumber'])
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我建议你在阅读CSV的时候解决这个问题,而不是稍后尝试解开它们。一种方法是在将CSV文件传递给
pandas
之前,对它们使用一个小型解析器这个解析器接受一个指向
csv
的打开文件句柄,以及一个将所需列名映射到各种可能的同义词的dict代码:
测试代码:
示例.csv:
结果:
解决方案#2
一个更干净,但不是那么有趣的解决方案是在执行concat之前重命名列:
代码:
测试代码:
相关问题 更多 >
编程相关推荐