0

pandasDataFrameのいくつかの変数に対していくつかの単純なz変換を実行しました。データフレーム内の合計216列のうち、196列を変換してから、197列を元の216列に連結して、合計412列にしました。

次に、このto_csv関数を使用して、新しいデータフレームをCSVファイルに書き込みました。元のデータは約300MBですが、新しいデータセットは1.2GBです。2倍未満の列を追加すると、最終ファイルのサイズが約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)

データの最初の行ですべてが正常に見えます。また、行数は3つのDataFrameすべてで同じです。

私は何かが足りないのですか?データフレームを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')

データに行や列をまったく追加せず、平方根をとっただけですが、2番目のCSVには小数点以下の桁数が多く、書き出すのにより多くのバイトが必要なため、2番目のCSVは最初のCSVの4倍のサイズです。文字列形式。標準偏差で割ると、同様に長い小数が得られる可能性があります。

于 2012-10-16T02:28:57.190 に答える