我正尝试从Pandas数据框中创建table_data
字典,如下所示:
import pandas as pd
d = {
'Name': ['John', 'Tom', 'Jack', 'Jill'],
'Age': [42, 53, 18, 22],
'City': ['London', 'New York', 'Bangkok', 'Warsaw']
}
df = pd.DataFrame(d)
table_data = dict(
headers = [[header] for header in list(df)],
columns = [df[header].tolist() for header in list(df)],
)
print(table_data)
有什么方法可以避免对list(df)
进行两次迭代,并将这两个列表理解转换为一个吗?
还是违反列表理解的目的,我应该改用普通的旧for
循环,像这样吗?:
import pandas as pd
d = {
'Name': ['John', 'Tom', 'Jack', 'Jill'],
'Age': [42, 53, 18, 22],
'City': ['London', 'New York', 'Bangkok', 'Warsaw']
}
df = pd.DataFrame(d)
headers = []
columns = []
table_data = {
'headers': headers,
'columns': columns,
}
for header in list(df):
table_data['headers'].append([header])
table_data['columns'].append(df[header].tolist())
print(table_data)
答案 0 :(得分:2)
类似这样的东西:
header = [list(df.columns.values)]
values = df.values.T
table_data = dict(headers=header, columns=values)
答案 1 :(得分:0)
是的,可以通过首先创建元组,然后创建zip
并将元组转换为列表来实现:
L = [([header],df[header].tolist()) for header in list(df)]
h, c = zip(*L)
table_data = dict(
headers = list(h),
columns = list(c),
)
非循环解决方案:
table_data = dict(
headers = df.columns.to_frame().values.tolist(),
columns = df.T.values.tolist(),
)
print(table_data)