我正在尝试使用PyUpset包,它在pickel中有测试数据,可以找到here
我可以运行以下代码来查看数据的内容和格式
from pickle import load
with open('./test_data_dict.pckl', 'rb') as f:
data_dict = load(f)
data_dict
显示数据为以下格式,它只是一个示例,
[495 rows X 4 columns],
'adventure': title rating_avg \
0 20,000 Leagues Under the Sea (1954) 3.702609
1 7th Voyage of Sinbad, The (1958) 3.616279
rating_std views
0 0.869685 575
1 0.931531 258
[281 rows x 4 columns],
'romance': title rating_avg \
0 'Til There Was You (1997) 2.402609
1 1-900 (1994) 2.411279
rating_std views
0 0.669685 575
1 0.981310 245
我一直在尝试以这种方式格式化我的csv数据,而我能得到的最接近的就是将pandas用于这样的事情
csv文件采用以下格式,
Type_A, Type_B, Type_C
x1,x2,x3
y1,y2,y3
使用pandas导入数据帧并在添加索引后将它们连接在一起
import pandas as pd
df=pd.read_csv(csv_file)
d1=df.Type_A.tolist()
d2=df.Type_B.tolist()
d3=df.Type_C.tolist()
然后添加使用enumerate()
的索引d1_df=list(enumerate(d1, 1))
d2_df=list(enumerate(d2, 1))
d3_df=list(enumerate(d3, 1))
d1_df # this gives me [(1, 'x1'), (2, 'y1')]
接下来,我将标签Id和Value添加到dataframe
labels = ['Id','Value']
d1_df = pd.DataFrame.from_records(d1_df, columns=labels)
d2_df = pd.DataFrame.from_records(d2_df, columns=labels)
d3_df = pd.DataFrame.from_records(d3_df, columns=labels)
d1_df # this gives me Id Value
# 0 1 x1
# 1 2 y1
然后将所有3组合成一个数据帧并重新定义Type_A,Type_B和Type_C
child_df = [d1_df, d2_df, d3_df]
labels2 = ['Type_A','Type_B','Type_C']
parent_df = pd.concat(child_df, keys=['Type_A', 'Type_B', 'Type_C'])
parent_df # out below
# Id Value
#Type_A 0 1 x1
# 1 2 y1
#Type_B 0 1 x2
# 1 2 y2
#Type_C 0 1 x3
# 1 2 y3
这是我被击中的地方,我认为我使用了错误的方法,并且以PyUpset使用的格式获取数据应该更简单。
答案 0 :(得分:2)
我认为您需要转置表格以使其处于“长”格式。一旦你这样做,你可以在pandas中使用groupby方法为pyupset创建正确的字典。
import pandas as pd
try:
# for Python 2.x
from StringIO import StringIO
except ImportError:
# for Python 3.x
from io import StringIO
test_string = StringIO("""Type_A,Type_B,Type_C
x1,x2,x3
y1,y2,y3""")
df = pd.read_csv(test_string)
df = pd.melt(df, var_name='type')
# df now looks like this:
#
# type value
# 0 Type_A x1
# 1 Type_A y1
# 2 Type_B x2
# 3 Type_B y2
# 4 Type_C x3
# 5 Type_C y3
pyupset_data = {key: df.loc[value] for key, value in df.groupby("type").groups.items()}
答案 1 :(得分:0)
我认为它实际上只是一个简单的python dict,其值为整个数据帧。关键是你想要在底行的标题。