gpt4 book ai didi

python - 使用 pandas 的交叉表时出现 ValueError

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:52 25 4
gpt4 key购买 nike

我确信必须有一个快速解决方案,但我找不到带有良好解释的答案。我希望迭代数据框并使用 pandas 为每对列构建交叉表。我从原始数据中提取了 2 列子集,并删除了包含不合适数据的行。我希望利用剩余的数据进行交叉表,最终构建一个列联表来进行 ChiX 测试。这是我的代码:

my_data = pd.read_csv(DATA_MATRIX, index_col=0) #GET DATA
AM = pd.DataFrame(columns=my_data.columns, index = my_data.columns) #INITIATE DF TO HOLD ChiX-result

for c1 in my_data.columns:
for c2 in my_data.columns:
sample_df = pd.DataFrame(my_data, columns=[c1,c2]) #make df to do ChiX on
sample_df = sample_df[(sample_df[c1] != 0.5) | (sample_df[c2] != 0.5)].dropna() # remove unsuitable rows

contingency = pd.crosstab(sample_df[c1], sample_df[c2]) ##This doesn't work?

# DO ChiX AND STORE P-VALUE IN 'AM': CODE STILL TO WRITE

数据帧包含值 0.0、0.5、1.0。 “0.5”缺少数据,因此我在创建列联表之前删除这些行,我希望从中创建列联表的剩余值都是 0.0 或 1.0。我已经检查了代码到目前为止的工作情况。打印到控制台的错误是:

ValueError: If using all scalar values, you must pass an index

谁能解释一下为什么这不起作用?有什么办法帮忙解决一下吗?或者甚至更好地提供一种替代方法来对色谱柱进行 ChiX 测试,那么这将非常有帮助,提前致谢!

编辑:sample_df前几行的结构示例

           col1  col2
sample1 1 1
sample2 1 1
sample3 0 0
sample4 0 0
sample5 0 0
sample6 0 0
sample7 0 0
sample8 0 0
sample9 0 0
sample10 0 0
sample11 0 0
sample12 1 1

最佳答案

两个相同实体之间的交叉表是没有意义的。 pandas 会告诉你:

ValueError: The name col1 occurs multiple times, use a level number

这意味着它假设您从具有相同名称的多索引数据帧传递两个不同列。

在您的代码中,您在嵌套循环中迭代列,因此会出现 c1 == c2 的情况,因此 pd.crosstab 会出错。

<小时/>

修复涉及添加 if 检查,并在列相等时跳过该迭代。所以,你会这样做:

for c1 in my_data.columns:
for c2 in my_data.columns:
if c1 == c2:
continue

... # rest of your code

关于python - 使用 pandas 的交叉表时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com