熊猫:fillna每个列都有一些价值

时间:2017-10-01 21:04:06

标签: python pandas

我有数据框,并且有use Scheb\YahooFinanceApi\ApiClient; use Scheb\YahooFinanceApi\ApiClientFactory; use GuzzleHttp\Client; // Create a new client from the factory $client = ApiClientFactory::createApiClient(); // Returns an array of Scheb\YahooFinanceApi\Results\HistoricalData $historicalData = $client->getHistoricalData("AAPL", ApiClient::INTERVAL_1_DAY, new \DateTime("-3 days"), new \DateTime("today")); echo $historicalData[0]['date']; ?> 个值:

NaN

我有值[12,15,3]的列表,我需要填写这些列:

欲望输出

col1   col2    col3
234    NaN     1
NaN    NaN     18
9      2       NaN

我可以用

做到
col1   col2   col3
234    15     1
12     15     18
9      2      3

但是没有循环可以做任何事吗?

3 个答案:

答案 0 :(得分:3)

构建那些词典,然后fillna

l1= [12, 15, 3]

df.fillna(dict(zip(df.columns,l1)))
Out[120]: 
    col1  col2  col3
0  234.0  15.0   1.0
1   12.0  15.0  18.0
2    9.0   2.0   3.0

答案 1 :(得分:3)

又一种方法:

df.fillna( pd.Series( [12, 15, 3], index=df.columns ) )

看起来你可能想要每列(?)的平均值,在这种情况下你可以这样做:

df.fillna( df.mean() )      # df.mean() returns a series

无论如何,这个答案和其他答案的关键只是给fillna一些带标签的输出。在这里,我使用了一个系列,而其他答案使用了词典。当然,这两种方法都很好,只取决于哪种方式更方便。

答案 2 :(得分:2)

您可以将列表转换为字典,并将fillna作为参数提供给字典:

 df.fillna({'col1': 12,'col2': 15, 'col3':3}, inplace=True)