Добавление списка фреймов данных в словарь - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь добавить список из 7 фреймов данных в словарь, где ключ - это имя фрейма данных, а значение - сам фрейм данных, например:

    {"Clock 1": clock1_df, "Clock 2": clock2_df, ...}

Я создал список с именами фреймов данных, а затем попробуйте поместить два списка в словарь, но он добавляет только последний элемент каждого списка в dict:

    adict = dict(zip(f_names_list, dataframes))     

или

    bdict = {k:v for k, v in zip(f_names_list, dataframes)}     

Q: Почему только последний элемент каждого списка в dict? Я злюсь за попытку добавить список фреймов данных в словарь? Оба списка имеют уникальные значения.

Я создаю список данных так:

path = 'dat/'
f = []

for (dirpath, dirnames, filenames) in walk(path):
    f.extend(filenames)
    break

dataframes = []
for filename in filenames:
  dataframes.append(pd.read_csv(path+filename, sep=" ", header = None))
  for df in dataframes:
    df.name = filename[:-10]
    df.columns = ['Time', 'Measurement']  

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я думаю, что ваша проблема здесь:

for df in dataframes:
    df.name = filename[:-10]
    df.columns = ['Time', 'Measurement']  

Это внутри первого, так как вы изменяете все фреймы данных, к концу все фреймы данных будут иметь одинаковые имена данных, имейте в виду что когда вы определили df эта переменная содержит ссылку на элемент в списке, так что вы все в списке изменены.

Я не знаю, как выглядят данные, но, возможно, это то, что вы ищу:

dataframes = []
for filename in filenames:
    dataframes.append(pd.read_csv(path+filename, sep=" ", header = None))
    df = dataframes[-1]
    df.name = filename[:-10]
    df.columns = ['Time', 'Measurement']

Оба метода с zip верны.

1 голос
/ 22 апреля 2020

Вы можете сделать это:

d = {}
for filename in filenames:
    d[filename] = pd.read_csv(path+filename, sep=" ", header = None)

Здесь ключ будет иметь имя информационного кадра (т. Е. Имя файла), а значение - фактический информационный кадр.

Вы можете прочитать из вот так:

for key, val in d.items():
    print(key,val)
...