上のCSVファイルへのdictを書く私はこのような辞書があります。正しい順序
{
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
をし、私はfor
ループを試みるが、ドン」
col1;col2;col3
1;4;7
2;5;8
3;6;9
のようなCSVをしたいです正しい順序で値を書き込むようにしました。
上のCSVファイルへのdictを書く私はこのような辞書があります。正しい順序
{
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
をし、私はfor
ループを試みるが、ドン」
col1;col2;col3
1;4;7
2;5;8
3;6;9
のようなCSVをしたいです正しい順序で値を書き込むようにしました。
Sth。このように動作するはずです:
import csv
d = {...}
with open('file.csv', 'wb') as f:
writer = csv.writer(f, delimiter=';')
header = ['col1', 'col2', 'col3']
# header = sorted(d.keys()[, key=custom_order_fnc])
rows = zip(*[d[col] for col in header])
writer.writerow(header)
for row in row:
writer.writerow(row)
'TypeError: 'str'はバッファインターフェイスをサポートしていません。 –
をここで重要なのは、行のリストに
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
を変換することです:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
私たちは、この式は列のリストを取得することを知っています:
header = ['col1', 'col2', 'col3']
[data[h] for h in header] # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
私たちが望むものを得ることができます:
zip(*(data[h] for h in header)) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
これで、データをCSVファイルに書き込むことができます。すべて一緒にそれを置く:
import csv
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
header = ['col1', 'col2', 'col3']
with open('dict_to_csv_in_order.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(zip(*(data[h] for h in header)))
をおpandasを使用する場合は、CSVファイルへの書き込みが超簡単になります。
import pandas as pd
data = {
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3' : [7, 8, 9]
}
df = pd.DataFrame(data, columns=['col1', 'col2', 'col3'])
df.to_csv('csv_file.csv', sep=';', index=False)
'dict'sキーは、本質的にキーが構築されているのと同じ順序で並べられ、またはキーをソートし、所望の順序で内容を取得するためのキーを反復されていない、' ordereddict'を使用 – EdChum