Pandas Python 3添加了一个列,其中包含使用长度的if-then语句

Pandas Python 3添加了一个列,其中包含使用长度的if-then语句,pandas,if-statement,conditional-statements,python-3.5,calculated-columns,Pandas,If Statement,Conditional Statements,Python 3.5,Calculated Columns,在Python 3中处理需要创建新列的数据帧。我有两个相似的列,它们的字符串长度不同。新列应返回长度为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.col

在Python 3中处理需要创建新列的数据帧。我有两个相似的列,它们的字符串长度不同。新列应返回长度为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)
我该如何重写最后一行? 多谢

我认为您可以使用with或
apply(len)

或如果出现其他情况:

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

假设每个列的元素为空,或缺失,则以下列将删除没有完整观测值的列,并将其保存为数据文件

中的新变量。
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”。

数据帧的所有列都应返回相同的len(col)参数。也就是说,不可能有具有不同长度列的数据帧。你的意思是有些列缺少观察值而其他列没有?e、 g.df[col1]=[a,b,c,d,N/a],df[col2]=[a,b,c,d,e]?测量理论-我的意思是,这些列中的每一列的结果要么是空白的,要么有一个或两个数字,要么有13个。试图让新列“清理数据”,只给出长度为13个字符的结果。哦,不,我不想删除任何数据,任何一列都将有13位字符串,我只想让新列查看两个旧列,并使用具有13位字符串的值。使用if-other条件,这会检查出来。再次感谢耶斯雷尔!这是一个巨大的数据集,并收到警告:“试图在数据帧切片的副本上设置一个值。请尝试使用.loc[row\u indexer,col\u indexer]=value。没关系,结果很好地工作并导出。很高兴能帮助您!
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')