Python:如何获得显示数据帧不同值的条形图概览?
我使用此lambda函数从数据帧中获得所有不同值的概览:Python:如何获得显示数据帧不同值的条形图概览?,python,pandas,dataframe,bar-chart,distinct-values,Python,Pandas,Dataframe,Bar Chart,Distinct Values,我使用此lambda函数从数据帧中获得所有不同值的概览: overview = df.apply(lambda col: col.unique()) 返回所需的结果,如下所示: ColA [1,2,3,...] ColB [4,5,6,7,8,9...] ColC [A,B,C] ... ... 如何使用子图/多条形图可视化此结果 我的第一次尝试只是将对象放入dataframe的plot方法中,这显然不
overview = df.apply(lambda col: col.unique())
返回所需的结果,如下所示:
ColA [1,2,3,...]
ColB [4,5,6,7,8,9...]
ColC [A,B,C]
... ...
如何使用子图/多条形图可视化此结果
我的第一次尝试只是将对象放入dataframe的plot方法中,这显然不起作用。因此,我尝试用对象创建一个数据帧:
overview = {}
for attr, value in overview.iteritems():
overview[attr] = value
df = pd.DataFrame(overview)
输出为:
ValueError: arrays must all be same length
所以我试着利用一个列表:
overview = []
for attr, value in obj_overview.iteritems():
overview.append({attr: value})
df = pd.DataFrame(overview)
但结果是一个交叉矩阵,它的行数与列数相同,行n指的是列n。这也是错误的
如何使用显示数据帧不同值的多个条形图/子图获得概览
事实上,我想实现两个可能的目标:
有多个条形图,其中每个条形图表示原始数据框中的一列。X轴显示所有不同/唯一的值,Y轴显示每个值的出现。这是一个很好的选择。我知道我目前的方法无法涵盖这一点。它基于一个类似的插件Alteryx,例如提供:
这在我目前的方法中应该是可能的:只有一个堆叠条形图显示所有列,其中x轴显示每个列,每个相应的条形图包含所有不同的值。
谢谢 通过以下方式分开绘图:
可乐
马驹
可乐
这将为所有数字列和字母列提供一个热图,其中颜色表示出现的次数。这是另一种绘制信息的方式
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
col_dict = {
'A': [1,2,3],
'B': [3,4,4,4,5,5,6],
'C': ['A','B','C'],
'D': ['C', 'D', 'D']
}
num_cols = []
num_idx = []
letter_cols = []
letter_idx = []
for col in col_dict:
if isinstance(col_dict[col][0], int):
num_cols += col_dict[col]
num_idx.append(col)
else:
letter_cols += col_dict[col]
letter_idx.append(col)
num_cols = sorted(list(set(num_cols)))
letter_cols = sorted(list(set(letter_cols)))
num_df = pd.DataFrame(0, index=num_idx, columns=num_cols)
letter_df = pd.DataFrame(0, index=letter_idx, columns=letter_cols)
for col in col_dict:
if isinstance(col_dict[col][0], int):
for item in col_dict[col]:
num_df.loc[col, item] += 1
else:
for item in col_dict[col]:
letter_df.loc[col, item] += 1
print(num_df)
print(letter_df)
plt.set_cmap('inferno')
plt.pcolor(num_df)
plt.yticks(np.arange(0.5, len(num_df.index), 1), num_df.index)
plt.xticks(np.arange(0.5, len(num_df.columns), 1), num_df.columns)
plt.colorbar()
plt.xlabel('Counts')
plt.ylabel('Columns')
plt.title('Numerical occurrences')
plt.figure()
plt.pcolor(letter_df)
plt.yticks(np.arange(0.5, len(letter_df.index), 1), letter_df.index)
plt.xticks(np.arange(0.5, len(letter_df.columns), 1), letter_df.columns)
plt.colorbar()
plt.xlabel('Counts')
plt.ylabel('Columns')
plt.title('Aphabetical occurrences')
plt.show()
你希望你的图表是什么样子?你能模拟一些东西或者解释一下你希望数据如何显示,因为有很多方法来显示数据吗?每种颜色一个吧?x轴是每个唯一的项目,y轴是计数?“还有别的吗?”亨利·埃克问得对,谢谢。我会加上的。虽然我也很感谢你的努力,@Henry Ecker的回答有点干净。。。无论如何,我欠你一杯咖啡。谢谢谢谢你的反馈。我添加了情节示例,因为我的方法有些不同,只是为了灵感。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
col_dict = {
'A': [1,2,3],
'B': [3,4,4,4,5,5,6],
'C': ['A','B','C'],
'D': ['C', 'D', 'D']
}
num_cols = []
num_idx = []
letter_cols = []
letter_idx = []
for col in col_dict:
if isinstance(col_dict[col][0], int):
num_cols += col_dict[col]
num_idx.append(col)
else:
letter_cols += col_dict[col]
letter_idx.append(col)
num_cols = sorted(list(set(num_cols)))
letter_cols = sorted(list(set(letter_cols)))
num_df = pd.DataFrame(0, index=num_idx, columns=num_cols)
letter_df = pd.DataFrame(0, index=letter_idx, columns=letter_cols)
for col in col_dict:
if isinstance(col_dict[col][0], int):
for item in col_dict[col]:
num_df.loc[col, item] += 1
else:
for item in col_dict[col]:
letter_df.loc[col, item] += 1
print(num_df)
print(letter_df)
plt.set_cmap('inferno')
plt.pcolor(num_df)
plt.yticks(np.arange(0.5, len(num_df.index), 1), num_df.index)
plt.xticks(np.arange(0.5, len(num_df.columns), 1), num_df.columns)
plt.colorbar()
plt.xlabel('Counts')
plt.ylabel('Columns')
plt.title('Numerical occurrences')
plt.figure()
plt.pcolor(letter_df)
plt.yticks(np.arange(0.5, len(letter_df.index), 1), letter_df.index)
plt.xticks(np.arange(0.5, len(letter_df.columns), 1), letter_df.columns)
plt.colorbar()
plt.xlabel('Counts')
plt.ylabel('Columns')
plt.title('Aphabetical occurrences')
plt.show()