Объединение двух столбцов при удалении дублирующихся строк в pandas кадре данных - PullRequest
0 голосов
/ 13 марта 2020

У меня есть фрейм данных с исходным столбцом «Все», который я разделил на столбцы RegionName1 и RegioName2. Есть повторяющиеся записи, например, Duluth и Duluth (Университет Дулута Миннесоты. Я хочу преобразовать строки, такие как Duluth (Университет Дулута Миннесоты в значения NaN. Поэтому я попытался

unitown ['RegionName2'] = [np.nan if '(' в x, иначе x для x в unitown ['RegionName2']]

и получил ошибку, что TypeError: аргумент типа 'float' не повторяется. Что еще можно попробовать ?

enter image description here

unitown=pd.read_table('university_towns.txt', header=None).rename(columns={0:'All'})
unitown['State']=unitown['All'].apply(lambda x: x.split('[edi')[0].strip() if x.count('[edi') else np.NaN).fillna(method="ffill")                       #.fillna(method="ffill")
unitown['RegionName1'] = unitown['All'].apply(lambda x: x.split('(')[0].strip() if x.count('(') else np.NaN)
unitown['RegionName2'] = unitown['All'].apply(lambda x: x.split(',')[0].strip() if x.count(',') else np.NaN)
unitown['RegionName2'] = [np.nan if '(' in x else x for x in     unitown['RegionName2']]
return unitown[unitown.State=='Minnesota']  

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вы можете использовать:

unitown.loc[unitown.RegionName2.str.contains("("), 'RegionName2'] = np.NaN

Или добавить этот лог c непосредственно к коду, который генерирует RegionName2, как в:

unitown['RegionName2'] = unitown['All'].apply(
    lambda x: x.split(',')[0].strip() if x.count(',') and "(" not in x.split(',')[0] else np.NaN
)
0 голосов
/ 13 марта 2020
#input data
d = {'RegionName1': ["a", "b", "c", "d"], 'RegionName2': ['Duluth and Duluth (University of Minnesota Duluth', "Monkato(Minnesota", 'Other1', 'Other2']}
df = pd.DataFrame(data=d)
print("Input dataframe:")
print(df)

#searching for '(' in RegionName2 column and replacing with NaN
z=0
for i, row in df.iterrows():
  k = df.loc[z,'RegionName2']
  if '(' in str(k):
    df.loc[z,'RegionName2'] = np.nan
  z = z+1
print("Output dataframe:")
print(df)
...