Есть ли способ сформировать кадр данных из таблицы из одного списка данных? - PullRequest
1 голос
/ 21 мая 2019

Я скопировал таблицу с веб-страницы, и когда я вставляю ее в текстовый файл (или в Excel), таблица значений.вот список примеров.

['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582']

Я хочу, чтобы 0-й элемент в столбце 1 1-й элемент в столбце 2 3-й элемент в столбце 3 4-й элемент в столбце 4

Ниже приведен длинный способ сделать это (я предполагаю)

import pandas as pd
mylist=['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582']
city=[]
code=[]
area=[]
for i,line in enumerate(mylist):
    if i%4==0:
        index.append(line)
    if i%4==1:
        code.append(line)
    if i%4==2:
        city.append(line)
    if i%4==3:
        area.append(line)
dict={'code':code,'city':city,'area':area}   
df=pd.DataFrame(dict)

Мне нужен приведенный выше код, но вкратце, я уверен, что у кого-то есть умный способ сделать это, просто я не могу его найти ...

Ответы [ 4 ]

1 голос
/ 21 мая 2019

Преобразование значений в массив и reshape, последний проход в конструктор DataFrame:

L = ['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582']

df = pd.DataFrame(np.array(L).reshape(-1, 4), columns=['code1','code2','city','area'])
print (df)
  code1 code2     city    area
0     1    42    Konya  40.838
1    42    62  Tunceli   7.582
0 голосов
/ 21 мая 2019

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

data = {'index':[],'code':[],'city':[],'area':[]}

li = ['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582']

data['index'].append(li[0])
data['code'].append(li[1])
data['city'].append(li[2])
data['area'].append(li[3])

data

df = pd.DataFrame(data)
df

Создайте держатель данных с помощью dict и просто добавьте в него значения. Используя ту же концепцию, если вы используете вложенный dict, вы можете просмотреть список и назначить его dict перед созданием кадра данных.

data = {'index':[],'code':[],'city':[],'area':[]}

li = [['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582'],
      ['2', '41', 'Test', '41', '44', '60', 'Test', '9.5']]

for i in li:
    data['index'].append(i[0])
    data['code'].append(i[1])
    data['city'].append(i[2])
    data['area'].append(i[3])


df = pd.DataFrame(data)
df
0 голосов
/ 21 мая 2019

Возможны несколько решений.

Вы сказали, что скопировали свои данные в текстовый файл.Более простое решение для построения кадра данных - вызвать read_csv (doc) .Он принимает в качестве аргументов имя файла.Вы также можете указать «разделитель» для каждого элемента.Вот пример.Предположим, у меня есть следующий текстовый файл:

Temp.txt :

index, code, city, area
1, 42, Konya, 40.838
42, 62, Tunceli, 7.582

Python :

df = pd.read_csv(r"..\\temp.txt", sep=',')
print(df)
#   index code     city    area
# 0     1   42    Konya  40.838
# 1    42   62  Tunceli   7.582

Однако, если у вас уже есть данные в Python (например, в списке).Исмаил предоставит решение.Вот еще один.Вы можете преобразовать свой список 1 измерений в список 2D измерений.Вот код:

Python :

mylist = ['1', '42', 'Konya', '40.838', '42', '62', 'Tunceli', '7.582']
def to_matrix(l, n):
    return [l[i:i + n] for i in range(0, len(l), n)]

my_list_reshape = to_matrix(mylist, 4)
print(my_list_reshape)
# [['1',  '42', 'Konya',   '40.838'],
#  ['42', '62', 'Tunceli', '7.582' ]]
df = pd.DataFrame(my_list_reshape, columns=['index', 'code', 'city', 'area'])
print(df)
#   index code     city    area
# 0     1   42    Konya  40.838
# 1    42   62  Tunceli   7.582
0 голосов
/ 21 мая 2019

Я думаю, вы могли бы использовать это pd.DataFrame(list_of_lists, columns=labels)

и используя это это , чтобы получить list_of_lists из вашего списка

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

labels=['index', 'code', 'city', 'area']

df = pd.DataFrame(chunks(mylist, 4), columns=labels)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...