【发布时间】:2017-05-26 23:21:44
【问题描述】:
我有一个 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 文件中读取数据?
-
@StephenRauch:我从目录中读取了大约 20 个 csv 文件,其中包含
for循环并将它们与total_df = pd.concat(dfs, ignore_index = True)连接起来。 -
您正在使用
pandas.read_csv?我也理解你基本上有一些列名的同义词列表是正确的吗? -
@StephenRauch 没错,我使用的是
pandas.read_csv,是的,列名是同义词,但它们的命名略有不同。 IE。Bike# = Bike # = Bikenumber
标签: python python-3.x csv pandas dataframe