【问题标题】:delete all nan values from list in pandas dataframe从熊猫数据框中的列表中删除所有nan值
【发布时间】:2018-12-18 02:45:23
【问题描述】:

如果有任何元素与 nan 一起存在,那么我想保留元素并只想删除 nan 喜欢

示例 1 ->

index      values
0     [nan,'a',nan,nan]

输出应该像

index   values

0         [a]

示例 2->

index      values
0     [nan,'a',b,c]

1     [nan,nan,nan]

输出应该像

index   values

0      [a,b,c]

1        [] 

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    这是使用df.apply 的一种方法。

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({"a": [[np.nan, np.nan, np.nan, "a", np.nan], [np.nan, np.nan], ["a", "b"]]})
    df["a"] = df["a"].apply(lambda x: [i for i in x if str(i) != "nan"])
    print(df)
    

    输出:

            a
    0     [a]
    1      []
    2  [a, b]
    

    【讨论】:

      【解决方案2】:

      您可以使用 np.nan == np.nan 计算为 False 的事实:

      df = pd.DataFrame([[0, [np.nan, 'a', 'b', 'c']],
                         [1, [np.nan, np.nan, np.nan]],
                         [2, [np.nan, 'a', np.nan, np.nan]]],
                        columns=['index', 'values'])
      
      df['values'] = df['values'].apply(lambda x: [i for i in x if i == i])
      
      print(df)
      
         index     values
      0      0  [a, b, c]
      1      1         []
      2      2        [a]
      

      lambda 只是一个匿名函数。您还可以使用命名函数:

      def remove_nan(x):
          return [i for i in x if i == i]
      
      df['values'] = df['values'].apply(remove_nan)
      

      相关:Why is NaN not equal to NaN?

      【讨论】:

      • 感谢您的回答。你能告诉我 lambda 函数在这里是如何工作的吗?难以理解 i==i
      • @ShubhamThagunna, lambda 是一个匿名函数。它定义了应用于序列中每个项目的逻辑。这里的项目是df['values'] 系列的元素。请参阅更新以获取具有命名函数的等效项。
      【解决方案3】:

      你可以在df.values上使用pd.Series.map

      import pandas as pd
      my_filter = lambda x: not pd.isna(x)
      df['new_values'] = df['values'].map(lambda x: list(filter(my_filter, x)))
      

      【讨论】:

        【解决方案4】:
        df['values'].apply(lambda v: pd.Series(v).dropna().values )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-28
          • 2019-06-26
          • 2013-12-12
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 2019-05-22
          • 2013-10-04
          相关资源
          最近更新 更多