【发布时间】:2020-05-24 22:42:46
【问题描述】:
我有这个 df:
country customer_id invoice price stream_id times_viewed year month day total_price StreamID TimesViewed
0 United Kingdom 13085.0 489434 6.95 85048 12.0 2017 11 28 NaN NaN NaN
1 United Kingdom NaN 489597 8.65 22130 1.0 2017 11 28 NaN NaN NaN
2 United Kingdom NaN 489597 1.70 22132 6.0 2017 11 28 NaN NaN NaN
3 United Kingdom NaN 489597 1.70 22133 4.0 2017 11 28 NaN NaN NaN
4 United Kingdom NaN 489597 0.87 22134 1.0 2017 11 28 NaN NaN NaN
stream_id 和 StreamID 列实际上是同一个东西。我拥有的 df 要大得多,它是由块创建的。问题来了,当读取这些块时,其中一些列名为stream_id,而另一些列名为StreamID,因此当使用pd.concat 将所有块放在一起时,最终结果如下所示。
当最后一个不为空时,我想做的是用stream_id 的值填充StreamID 的空值。我不确定这是否是正确的方法,或者是否有更有效的方法来解决这个问题。
times_viewed 和 TimesViewed 列也出现了同样的问题,因此同样的解决方案也适用于这一列。
我尝试像这样使用np.where:
df['new_col'] = np.where(df['StreamID'].isnull(), df['stream_id'], df['StreamID'])
但我不确定这是否正确,或者是否有更好的方法来做到这一点。有人可以帮我解决这个问题吗?
非常感谢您。
【问题讨论】:
-
我认为最好在连接之前重命名列以避免此问题,而不是
np.where或df.loc填充空值然后删除重复的列。跨度> -
嗨@Datanovice。是的,我知道,但是我从许多单独的 json 文件中组成了这个 df,找出哪些文件具有哪些列名会很痛苦。是因为我正在寻找另一种方法来解决这个问题。
np.where或df.iloc你会怎么做? -
are the columns ordered, just rename them according to order, or useindex=False` inpd.concat沿顶轴连接
标签: python python-3.x pandas dataframe null