Python 3 pandas 使用 length 添加一个带有 if then 语句的列

Python 3 pandas add a column with if then statement using length

正在处理 Python 3 Pandas 中的数据框,需要创建一个新列。我有两个具有不同长度字符串的相似列。新列应该 return 具有 13 个字符长度的第 1 列或第 2 列。在 excel 中,我将其写为:c2=if(len(b2)=13,b2,a2) 然后将公式复制下来。

我需要解释的代码是:

df = pd.read_csv("example15.csv")

#create a new column with if-then statment
df['13_digit_#'] = (df.column1 len = 13 or df.column2 len = 13)

我将如何重写最后一行? 非常感谢!

我想你可以使用 numpy.where with str.lenapply(len):

df['13_digit_#'] = np.where((df.column1.str.len() == 13) | 
                            (df.column2.str.len() == 13), 'a', 'b')

或者其他条件:

df['13_digit_#'] = np.where(df.column1.str.len() == 13, df.column1, df.column2)

样本:

df = pd.DataFrame({'column1':['0123456789abc','a','b'],
                   'column2':['abcabcabcabca','c','d']})

print (df)
         column1        column2
0  0123456789abc  abcabcabcabca
1              a              c
2              b              d

df['13_digit_#'] = np.where(df.column1.str.len() == 13, df.column1, df.column2)
#df['13_digit_#'] = np.where(df.column1.apply(len) == 13, df.column1, df.column2)
print (df)
         column1        column2     13_digit_#
0  0123456789abc  abcabcabcabca  0123456789abc
1              a              c              c
2              b              d              d

假设每列的空白或缺失元素为 NaN,则以下内容将删除没有完整观测值的列,并将其作为新变量保存在数据框中

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3], 'b':[1,2,np.nan], 'b':[1, np.nan, np.nan]})

df['newcol'] = df[['a','b']].dropna(axis = 1, how = 'any')

在最后一行中,axis = 1 告诉命令查看每一列(a 和 b),"how = 'any'" 告诉它删除具有任何缺失值的列并将其保存为 'newcol'.