Python 3 pandas使用if then语句添加一个列



处理Python 3 Pandas中需要创建新列的数据框架。我有两个类似的列不同长度的字符串。新列应该返回长度为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.wherestr.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'。

相关内容

最新更新