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