每行CONCAT和DELETE nan,并将结果放在另一列

问题描述

我只是学习了Panda的基础知识,我正在寻找一种方法来连接和删除nan值,并在数据框的新列中获取结果。

我知道如何合并,如何创建列表,但实际上却不知道如何迭代列,删除nan值,最后将结果合并到新列中。

我有一个具有不同编号的表,我想用熊猫创建一个列(CONTACT [CALLER_PHONE] = ...),其中每一行的所有编号均不包含空值。 我想要在表中的结果示例:

Number1     Number2      Number3      CALLER_PHONE
0675416952  0675416941   0675416930   0675416952,067541694,0675416930
Nan         0675417080   0675417082   0675417080,0675417082
Nan         Nan          0675837759   0675837759

我的代码

import pandas as pd

CONTACT = pd.read_excel('O:/16_GIS_Team/X_Tools/Model Builder And Parcels Package/Contact_20200807/CONTACT_20200807.xlsx')

pd.set_option('display.max_columns',None)
pd.set_option('display.max_rows',None)

CONTACT['CALLER_NAME'] = CONTACT['First Name'].str.cat(CONTACT['Last Name'],sep =" ")

cols = CONTACT[['Work Phone','Mobile','Home Phone','SMS marketing phone','Other Phone Number','Details (USA): Caller Phone']]

print(cols)

columns = list(cols)

for i in columns:
    Clean_Columns = cols.dropna(axis=1,how='any')
    print (Clean_Columns[i][2])

我的文件是Excel 联系人是我的数据框

我尝试遍历该列,而不是使用dropna并获得该列表的结果,但是它没有用,而且我没有更深入地研究。

Error with my list peace of code

我愿意接受任何建议,非常感谢!

解决方法

您可以定义自己的函数,该函数将选择的数字作为字符串返回,并以','分隔。

# get the data
cols = CONTACT[['Work Phone','Mobile','Home Phone','SMS marketing phone','Other Phone Number','Details (USA): Caller Phone']]

def concatenate_numbers(s):
    """Remove all NA values from a series and return as a string joined by ','"""
    s = s.dropna()
    return ','.join([str(number) for number in s])

# create a new column by applying the above function to every row of the dataframe.
df['all_phones'] = df.apply(concatenate_numbers,axis=1)

pandas.Series.dropna返回一个NA值掉落的pandas.Series,因此您需要将其分配给变量。然后,您可以根据结果在数据框中创建一个新列。

,

您不必为列创建列表。只需使用df [“ column_name”]。columns

df = df.dropna() 要么 df = df [df [“ columns_name”]!= np.nan]