0

我对 pandas DataFrame 中的一些变量执行了一些简单的 z 变换。在数据框中的总共 216 列中,我转换了其中的 196 列,然后将 197 连接到原始的 216 列,总共 412 列。

然后我使用该to_csv函数将新数据帧写入 CSV 文件。原始数据约为 300MB,而新数据集为 1.2GB。添加不到两倍的列会导致最终文件的大小增加大约 4 倍,这似乎很奇怪。

代码是:

import pandas as pd


full_data = pd.read_csv('data.csv')

names = full_data.columns.tolist()
names = names[16:-2]
len(names) #197 as expected
transform = (full_data[names] - full_data[names].mean())/full_data[names].std() #Transform has 197 columns as expected. 

column_names = transform.columns.tolist()

new_names = {}
for name in column_names:
    new_names[name] = name + '_standardized'

transform = transform.rename(columns=new_names)


to_concat = [full_data, transform]

final_data = pd.concat(to_concat, axis=1)

final_data.to_csv('transformed_data.csv', index = False)

第一行数据看起来一切正常。此外,所有三个 DataFrame 之间的行数相同。

我错过了什么吗?有没有更有效的方法将 DataFrames 写入 CSV 文件?

4

1 回答 1

1

CSV 存储数据的字符串表示形式,因此它不一定会随着列数以明显的方式缩放,除非所有列在字符串表示形式中具有大致相同的大小。如果您的原始数据只有几个小数位,那么您的 CSV 文件的大小可能会大大增加,这是很合理的。如果您读取诸如 0.1、0.2、3、1.7 之类的数字,然后对它们进行 z 缩放,您可能会得到包含许多小数位的结果。作为一个简单的例子,我这​​样做了:

>>> df = pandas.DataFrame([[2, 3, 5]], columns=["A", "B", "C"])
>>> df
   A  B  C
0  2  3  5
>>> df.to_csv('someCSV.csv')
>>> df**0.5
          A         B         C
0  1.414214  1.732051  2.236068
>>> (df**0.5).to_csv('someCSV2.csv')

我根本没有在数据中添加任何行或列,只是取了平方根,但第二个 CSV 是第一个的 4 倍,因为第二个有很多小数位,需要更多字节才能写出以字符串形式。当您除以标准偏差时,您可能会得到类似的长小数。

于 2012-10-16T02:28:57.190 回答