Как сравнить два DataFrame (StructType) в Python - PullRequest
0 голосов
/ 06 ноября 2018

По сути, это для сравнения двух фреймов данных, я могу сравнить их имена с:

def diff(first, second):
    second = set(second)
    return [item for item in first if item not in second]

Но я также хочу сравнить не только по имени, но и по типу данных

Пример кадра данных, как показано ниже:

>>> pDF1.schema
StructType(
List(
StructField(Scen_Id,IntegerType,true),
StructField(Flow_Direction,StringType,true),
StructField(Dataset_Type,StringType,true),
StructField(Flag_Extrapolation_Percent_Change_Stay,IntegerType,true)
)
)

>>> pDF2.schema
StructType(
List(
StructField(Scen_Id,StringType,true),
StructField(Flow_Direction,StringType,true),
StructField(Dataset_Type,StringType,true),
StructField(Flag_Extrapolation_Percent_Change_Stay,IntegerType,true)
)
)

Как вы можете видеть из этого конкретного упрощенного примера (часто тот случай, когда наш информационный фрейм содержит более 100 полей), pDF2 имеет то же имя / тип данных pDF1, за исключением первого поля, которое имеет другой тип данных.

Большое спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

ОК, поэтому ответ действительно очень прост, как показано ниже для справки будущего читателя:

def diff(first, second):
    second = set(second)
    return [item for item in first if item not in second]

dl1_fields = list(pDF1.schema.fields)

dl2_fields = list(pDF2.schema.fields)

print("=========================================================")
print("schema comparison result:")
print("=========================================================")
dl1Notdl2 = diff(dl1_fields, dl2_fields)
print(str(len(dl1Notdl2)) + " columns in first df but not in second")
pprint.pprint(dl1Notdl2)
print("=========================================================")
dl2Notdl1 = diff(dl2_fields, dl1_fields)
print(str(len(dl2Notdl1)) + " columns in second df but not in first")
pprint.pprint(dl2Notdl1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...