有没有一种方法可以从单个数据列表中形成一个数据框?

时间:2019-05-21 07:05:56

标签: python pandas list

我已经从网页中复制了一个表格,当我将其粘贴到文本文件(或excel)中时,表格是一个值列表。 这是示例列表。

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

我想要 第1列的第0个项目 第2栏的第一项 第3栏的第3项 第四列的第四项

以下是完成此操作的一种很长的方法(我认为)

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 个答案:

答案 0 :(得分:1)

将值转换为数组和 body { font-family: Alegreya+SC:regular; } ,最后传递给reshape构造函数:

DataFrame

答案 1 :(得分:0)

我想您可以使用此pd.DataFrame(list_of_lists, columns=labels)

并使用此this从您的列表中获取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)

答案 2 :(得分:0)

可能有几种解决方案。

您说您已将数据复制到文本文件。构建数据框的更简单解决方案是调用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中拥有数据(例如在列表中)。 Ismail提供了解决方案。这是另一个。您可以将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

答案 3 :(得分:-2)

如果您仅指一个列表,并且想利用字典来构建数据框,则可以尝试:

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构建数据持有者,然后将值附加在其中。使用相同的概念,如果您使用的是嵌套字典,则可以在创建数据框之前浏览列表并将其分配给字典。

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