gpt4 book ai didi

python - 将 sav 转换为 pandas df 会错过最后一列

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

我正在使用以下代码将 SPSS .sav 文件转换为 pandas 数据帧:

import pandas as pd
import savReaderWriter as spss

raw_data = spss.SavReader(filename, returnHeader = True)
raw_data_list = list(raw_data)
df = pd.DataFrame(raw_data_list)

此代码运行良好,除了最后一列未包含在数据框中。

我正在转换一个包含 70,484 列和 3,609 行的巨大(且效率非常低)的表。然而,只有 70,483 列在 pandas 数据框中,所有行都在那里。

这里出了什么问题?

最佳答案

Check your first row in your .sav file

如果您想将数据作为数据帧读入 Pandas。该文件具有以下格式

a b c d
0 1 2 3 4 5
1 2 3 4 5 6

当你用 Pandas 阅读它时,你会得到以下数据框

    a b c d
0 1 2 3 4 5
1 2 3 4 5 6

当我执行 print df.columns 时,我得到类似的信息:

Index([u'a', u'b', u'c', u'd'], dtype='object')

当我执行 print df.iloc[0] 时,我得到:

a  2
b 3
c 4
d 5

Name: (0, 1)

我想你会喜欢这样的数据框

a b c d col1 col2
0 1 2 3 4 5
1 2 3 4 5 6

Possible Solution is:

执行此操作的一种方法是将数据读入两次。一次跳过第一行(原始列),第二行仅读取列名(并跳过所有行)

df = pd.read_csv(header=None, skiprows=1)
columns = pd.read_csv(nrows=0).columns.tolist()
columns
Output
['a', 'b', 'c', 'd']

现在找到缺失列的数量并使用列表理解来创建新列

num_missing_cols = len(df.columns) - len(columns)
new_cols = ['col' + str(i+1) for i in range(num_missing_cols)]
df.columns = columns + new_cols
df

a b c d col1 col2
0 0 1 2 3 4 5
1 1 2 3 4 5 6

关于python - 将 sav 转换为 pandas df 会错过最后一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51081322/

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