【问题标题】:Dropping NaNs from multiple Pandas Series从多个 Pandas 系列中删除 NaN
【发布时间】:2021-12-31 17:45:49
【问题描述】:

数据框如下:

import pandas as pd
import numpy as np  # used for the nan values

data = {'card_name': ['Diamonds', 'Clovers', 'HorseShoe'], '$20': [1000.0, 10.0, np.nan], '$25': [500.0, np.nan, 1873.0], '$30': [25, 213, 4657], '$40': [np.nan, 2199.0, np.nan], '$50': [1500.0, np.nan, 344.0], '$70': [np.nan, 43.0, 239.0], '$75': [30.0, 2.0, np.nan], '$100': [1.0, np.nan, 748.0]}
df = pd.DataFrame(data)

   card_name   $20  $25  $30  $40  $50   $70   $75  $100
0  Diamonds   1000  500  25   NaN 1500   NaN    30    1
1  Clovers    10    NaN  213 2199  NaN   43     2    NaN
2  HorseShoe  NaN  1873 4657  NaN  344   239   NaN   748

将一行变成一个系列,去掉 NaN,然后​​把它变成一个 DataFrame:

Diamonds = df.iloc[0]
Diamonds = Diamonds.dropna()
Diamonds.to_frame()

(第一行的输出为没有 NaN 的系列)

card_name  Diamonds
$20        1000
$25        500
$30        25
$50        1500
$75        30
$100       1

如何为所有行执行此操作,而不必一遍又一遍地重新输入代码?

我正在使用 Python 和 Pandas

【问题讨论】:

    标签: python pandas dataframe concatenation series


    【解决方案1】:

    试试stack

    s = df.set_index('card_name').stack()
    s.loc['Diamonds']
    $20     1000.0
    $25      500.0
    $30       25.0
    $50     1500.0
    $75       30.0
    $100       1.0
    dtype: float64
    

    更新

    s.loc['Diamonds'].reset_index(name='Diamonds')
      index  Diamonds
    0   $20    1000.0
    1   $25     500.0
    2   $30      25.0
    3   $50    1500.0
    4   $75      30.0
    5  $100       1.0
    

    【讨论】:

    • 这确实产生了一个系列。但是如何对所有行执行此操作,然后将新系列连接到一个新的 DataFrame 中? @BENY
    猜你喜欢
    • 2017-05-18
    • 2013-12-12
    • 2015-11-11
    • 2017-12-22
    • 1970-01-01
    • 2019-04-22
    • 2012-12-31
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多