2015-12-23 2 views
1

Я конкатенирую несколько месяцев csv's, где более новые версии имеют дополнительные столбцы. В результате, объединение всех них заполняет определенные строки определенных столбцов с помощью NaN.Выбор другого значения для записей NaN из добавления DataFrames с разными столбцами

Проблема с этим поведением заключается в том, что он смешивает эти NaN с истинными нулевыми записями из набора данных, которые необходимо легко отличить.

Мое единственное решение на данный момент состоит в том, чтобы заменить исходные NaN на уникальную строку, объединить csv, заменить новые NaN на вторую уникальную строку, заменить первую уникальную строку на NaN.

Учитывая объем данных, которые я обрабатываю, это очень неэффективное решение. Я думал, что есть какой-то способ определить, как Panda's DataFrame заполнит эти записи, но не смог найти что-либо на нем.

обновленный пример:

A B 
1 NaN 
2 3 

И добавить

A B C 
1 2 3 

дает

A B C 
1 NaN NaN 
2 3 NaN 
1 2 3 

Но я хочу

A B C 
1 NaN 'predated' 
2 3 'predated' 
1 2 3 
+0

Вы должны быть более конкретными, добавьте несколько небольших примеров ваших данных и примеров того, чего вы хотите достичь. – plaes

+0

обновил пример того, что происходит и что я хотел бы совершить – Fonti

ответ

2

Если у вас есть базовый набор столбцов, как здесь представлено df1, вы можете применить .fillna() к .difference() между базовым набором и любыми новыми столбцами в более позднем DataFrames.

df1 = pd.DataFrame(data={'A': [1, 2], 'B': [np.nan, 3]}) 

    A B 
0 1 NaN 
1 2 3 

df2 = pd.DataFrame(data={'A': 1, 'B': 2, 'C': 3}, index=[0]) 

    A B C 
0 1 2 3 

df = pd.concat([df1, df2], ignore_index=True) 

new_cols = df2.columns.difference(df1.columns).tolist() 
df[new_cols] = df[new_cols].fillna(value='predated') 

    A B   C 
0 1 NaN predated 
1 2 3 predated 
2 1 2   3 
+0

Проблема в том, что он заменит все значения NaN в этом столбце. Если 3 является NaN, тогда он станет «предшествовавшим» и не будет различимым. Однако я получил решение для работы, добавив столбец C в df1 с значениями NaN, используя fillna, а затем добавив. – Fonti

Смежные вопросы