У меня есть функция, которая отлично работает с крошечным кадром данных Pandas и возвращает корректировки, как и ожидалось,
но когда я применяю ее к нетестовому кадру данных, который представляет собой лишь небольшой df (300 x 20), он полностью запутался.
Используя приведенный ниже пример в качестве примера, он заполнит столбцы 3–7 одним и тем же списком значений для всех строк в каждом соответствующем столбце...
Чтобы еще больше запутать, когда я удаляю код из функции и запускаю его как часть одного файла, ожидаемые результаты достигаются для нетестового фрейма данных...
Может ли кто-нибудь подсказать, что здесь может происходить и почему поведение может отличаться? / что я меняю.
Я предоставляю здесь код для развлечения
def test_populate_columns_from_Key_Value_String():
starting_df = pd.DataFrame(
{
"Names": ["Sarah", "John"],
"Relations": [
"has parent: Maggie, is parent of: Tom, is parent of: Grace, is parent of: Bart, is related to: Grandpa Simpson, is hated by: Joseph",
"is friends with: Tracey, has parent: Greg",
],
"has parent": [[], []],
"is parent of": [[], []],
"is related to": [[], []],
"is hated by": [[], []],
"is friends with": [[], []],
}
)
desire_df = pd.DataFrame(
{
"Names": ["Sarah", "John"],
"Relations": [
"has parent: Maggie, is parent of: Tom, is parent of: Grace, is parent of: Bart, is related to: Grandpa Simpson, is hated by: Joseph",
"is friends with: Tracey, has parent: Greg",
],
"has parent": [["Maggie"], ["Greg"]],
"is parent of": [["Tom", "Grace", "Bart"], []],
"is related to": [["Grandpa Simpson"], []],
"is hated by": [["Joseph"], []],
"is friends with": [[], ["Tracey"]],
}
)
starting_df.apply(
populate_columns_from_Key_Value_String, axis=1, args=("Relations",)
)
print(starting_df)
assert desire_df.loc[0, "has parent"] == starting_df.loc[0, "has parent"]
assert starting_df.loc[0, "is hated by"] == ["Joseph"]
assert starting_df.loc[1, "is friends with"] == ["Tracey"]
assert starting_df.loc[0, "is parent of"] == desire_df.loc[0, "is parent of"]
def populate_columns_from_Key_Value_String(
row: pd.Series, column_to_extract_from="Column_name_with_Relational_String"
):
string_to_extract_values_from = row[column_to_extract_from]
if isinstance(string_to_extract_values_from, str):
for key_value_pair in string_to_extract_values_from.split(","):
if isinstance(row[key_value_pair.split(":")[0].strip()], list):
row[key_value_pair.split(":")[0].strip()].append(
key_value_pair.split(":")[1].strip()
)
Подробнее здесь: https://stackoverflow.com/questions/790 ... input-size
Pandas применяет функцию, которая ведет себя по-разному в зависимости от размера ввода? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Pandas применяет функцию, которая ведет себя по-разному в зависимости от размера ввода?
Anonymous » » в форуме Python - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Pandas применяет функцию, которая ведет себя по-разному в зависимости от размера ввода?
Anonymous » » в форуме Python - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Pandas применяет функцию, которая ведет себя по-разному в зависимости от размера ввода?
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Pandas применяет функцию, которая ведет себя по-разному в зависимости от ввода
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-