处理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.where
与str.len
或apply(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'。