Python 从数据帧中获取所有列的第一个非空单元格
我有一个包含数百列的dataframe df。我想要的是只保留第一个非空单元格 df: 日期时间索引 贸易1 贸易2 ...... 1/1/2021 ...... 2/1/2021 1.15 ...... 3/1/2021 1.21 1.31 ...... 4/1/2021 1.23 1.16 ......Python 从数据帧中获取所有列的第一个非空单元格,python,Python,我有一个包含数百列的dataframe df。我想要的是只保留第一个非空单元格 df: 日期时间索引 贸易1 贸易2 ...... 1/1/2021 ...... 2/1/2021 1.15 ...... 3/1/2021 1.21 1.31 ...... 4/1/2021 1.23 1.16 ...... Pandas有一个名为first\u valid\u index()的函数,它返回第一个非NA/null行的索引值 所以你可以做一些像 trade1 = df['trade 1'].firs
Pandas有一个名为
first\u valid\u index()
的函数,它返回第一个非NA/null行的索引值
所以你可以做一些像
trade1 = df['trade 1'].first_valid_index()
trade2 = df['trade 2'].first_valid_index()
#...
d = {'trade 1':[df.at[trade1,'trade 1']],'trade 2':[df.at[trade2,'trade 2']]}
df2 = pd.DataFrame(d)
然而,由于您说您有数百列,您可能希望迭代所有这些列,而不是单独键入它们。你可以用这样的东西把它循环一下
colSize = len(df.columns)
d = {} #make a blank dictionary to later put all of our data in
for n in range(1,colSize):
first = df.iloc[:,n].first_valid_index() #gets that first non-null row in that column
colName = list(df)[n] #gets the column name
d.update({colName:[df.at[first,colName]]}) #updates our temporary dictionary to hold our column name and the value from that non-null row
df2 = pd.DataFrame(d)
你能自己演示一下解决这个问题的方法吗?它卡在了代码:d.update({colName:[df.at[first,colName]]})这一行上面有没有包含
d={}
?我们需要创建空白字典,然后才能更新它。你能发布你收到的任何类型的错误消息吗?它显示---->d.update({colName:[final_df.at[first,colName]]})keyror:none也就是第一个变量给出的是索引而不是价格。我在代码中看到错误,你使用的是final_df
,而不是df
;您是否在其他任何地方正确使用了final_df
?另一个潜在的问题可能是colName变量——它是否在所有情况下都拼写相同?对于first-correct,它给出的是索引,而不是单元格本身的值。执行d.update()
行时,df.at([first,colName])
通过查看索引first
和列colName
来查找该单元格中的值。