Python从非数字数据列表创建表

Python从非数字数据列表创建表,python,pandas,matplotlib,Python,Pandas,Matplotlib,我正在寻找一种方法来创建一个简单的表,给出一组3个文本数据列表,以及一个标题列表。下面是详细说明:根据数据源,我需要3列和不确定数量的行。如果有办法在Python中正常执行的话,我也不希望必须导入任何东西。或者,我可以使用pandas、matplotlib或它们的组合。这是我的密码: headers=["SCHEME","SERVER","PATH"] schemes=[] servers=[] paths=[] colLabels=['PATH','SERVER','SCHEME'] rowL

我正在寻找一种方法来创建一个简单的表,给出一组3个文本数据列表,以及一个标题列表。下面是详细说明:根据数据源,我需要3列和不确定数量的行。如果有办法在Python中正常执行的话,我也不希望必须导入任何东西。或者,我可以使用pandas、matplotlib或它们的组合。这是我的密码:

headers=["SCHEME","SERVER","PATH"]
schemes=[]
servers=[]
paths=[]
colLabels=['PATH','SERVER','SCHEME']
rowLabels=[]
def homework2(filename):
    """Opens a file, extracts URLs, parses them, and places them into table"""
    filedata=open(filename,"r")
    for url in filedata:
        lineurl=SimpleURL(url)
        schemes.append(lineurl.scheme())
        servers.append(lineurl.server())
        paths.append(lineurl.path())
此代码读取给定的文本文件,获取每一行,并将URL解析为方案、服务器和路径。三个列表(以及标题)如下所示:

['SCHEME', 'SERVER', 'PATH']
['http', 'https', 'https']
['google.com', 'twitter.com', 'github.com']
['/', '/pretend/me', '/asdflkjas/stuff']
data = {header: [scheme[i], server[i], path[i]] for i, header in enumerate(headers)}
我希望创建这个输出,或者类似的东西

SCHEME        SERVER         PATH
http          https          https
google.com    twitter.com    github.com
/             /pretend/me    /asdflkjas/stuff
我尝试过使用DataFrame和table()函数,但无法使其正常工作。

代码:

import pandas

headers = ['SCHEME', 'SERVER', 'PATH']
scheme = ['http', 'https', 'https']
server = ['google.com', 'twitter.com', 'github.com']
path = ['/', '/pretend/me', '/asdflkjas/stuff']

data = {}

for i, header in enumerate(headers):
    data.update({header: [scheme[i], server[i], path[i]]})

df = pandas.DataFrame(data=data, columns=headers)
print(df)
       SCHEME       SERVER              PATH
0        http        https             https
1  google.com  twitter.com        github.com
2           /  /pretend/me  /asdflkjas/stuff
输出:

import pandas

headers = ['SCHEME', 'SERVER', 'PATH']
scheme = ['http', 'https', 'https']
server = ['google.com', 'twitter.com', 'github.com']
path = ['/', '/pretend/me', '/asdflkjas/stuff']

data = {}

for i, header in enumerate(headers):
    data.update({header: [scheme[i], server[i], path[i]]})

df = pandas.DataFrame(data=data, columns=headers)
print(df)
       SCHEME       SERVER              PATH
0        http        https             https
1  google.com  twitter.com        github.com
2           /  /pretend/me  /asdflkjas/stuff
使用
pandas
DataFrame
我们可以轻松做到这一点

只需将头和数据连接到一个字典中,头是键,
scheme
server
path
的列表是值

然后只需插入到
pandas
DataFrame

注意:

如果希望在更少的代码行中获得相同的输出,则可以将将将列表连接到字典中的行重写为不太清晰但功能相同的字典理解,如下所示:

['SCHEME', 'SERVER', 'PATH']
['http', 'https', 'https']
['google.com', 'twitter.com', 'github.com']
['/', '/pretend/me', '/asdflkjas/stuff']
data = {header: [scheme[i], server[i], path[i]] for i, header in enumerate(headers)}

试试这个代码
column_width
是每列中元素的最大长度

headers = ["SCHEME","SERVER","PATH"]
schemes = ['http', 'https', 'https']
servers = ['google.com', 'twitter.com', 'github.com']
paths = ['/', '/pretend/me', '/asdflkjas/stuff']

def show_URL(headers, schemes, servers, paths):
    column_width = [max(len(x) for x in row) for row in zip(headers, schemes, servers, paths)]
    for item in [headers, schemes, servers, paths]:
        str_printing = ""
        for index, val in enumerate(item):
            str_printing += "{:{}}".format(val, column_width[index] + 5 )
        print (str_printing)

show_URL(headers, schemes, servers, paths)
输出:

SCHEME         SERVER          PATH                 
http           https           https                
google.com     twitter.com     github.com           
/              /pretend/me     /asdflkjas/stuff

colLabels和rowLabels都是我一次尝试后留下的。此外,我还有一个名为SimpleURL的类,它可以很容易地将URL的各个部分分离开来。这不能使用必须安装在另一台计算机上的模块来完成。