我在csv文件中有以下格式的一些數據。如何轉換數據如下python?
Id Category
1 A
2 B
3 C
4 B
5 C
6 d
我想將它轉換成下面的格式並保存它的另一個csv文件
Id A B C D E
1 1 0 0 0 0
2 0 1 0 0 0
3 0 0 1 0 0
4 0 1 0 0 0
5 0 0 1 0 0
6 0 0 0 1 0
我在csv文件中有以下格式的一些數據。如何轉換數據如下python?
Id Category
1 A
2 B
3 C
4 B
5 C
6 d
我想將它轉換成下面的格式並保存它的另一個csv文件
Id A B C D E
1 1 0 0 0 0
2 0 1 0 0 0
3 0 0 1 0 0
4 0 1 0 0 0
5 0 0 1 0 0
6 0 0 0 1 0
與pd.get_dummies()
>> df = pd.read_csv(<path_to_file>, sep=',', encoding='utf-8', header=0)
>> df
Id Category
0 1 A
1 2 B
2 3 C
3 4 B
4 5 C
5 6 d
>> pd.get_dummies(df.Category)
試試這個將編碼Category
,給你新的列:
A B C d
但是不會'修復'd - > D,並且不會給你任何無法從Category
中的值推導出的列。
我建議你檢查之前評論中發佈的解決方案。
編輯
# Load data from .CSV with pd.read_csv() as demonstrated above
In [13]: df
Out[13]:
Category Id
0 A 1
1 B 2
2 C 3
3 B 4
4 C 5
5 D 6
## One-liner for hot-encoding, then concatenating to original dataframe
## and finally dropping the old column 'Category', you can skip the
## last part if you want to keep original column as well.
In [14]: df = pd.concat([df, pd.get_dummies(df.Category)], axis=1).drop('Category', axis=1)
In [15]: df
Out[15]:
Id A B C D
0 1 1.0 0.0 0.0 0.0
1 2 0.0 1.0 0.0 0.0
2 3 0.0 0.0 1.0 0.0
3 4 0.0 1.0 0.0 0.0
4 5 0.0 0.0 1.0 0.0
5 6 0.0 0.0 0.0 1.0
## Write to file
In [16]: df.to_csv(<output_path>, sep='\t', encoding='utf-8', index=None)
正如你可以看到這是不是移調,唯一編碼熱的Category
列被添加到每一行的結果。
不管Excel是否接受最終的數據,不幸的是,你可以用熊貓來做這件事。
我希望這會有所幫助。
使用樞軸表(更新爲包括的.csv讀/寫功能):
import pandas as pd
path = 'the path to your file'
df = pd.read_csv(path)
# your original dataframe
# Category Id
# 0 A 1
# 1 B 2
# 2 C 3
# 3 B 4
# 4 C 5
# 5 D 6
# pivot table
df.pivot_table(index=['Id'], columns='Category', fill_value=0, aggfunc='size')
# save to file
df.to_csv('path\filename.csv') #e.g. 'C:\\Users\\you\\Documents\\filename.csv'
OUTPUT:
Category A B C D
Id
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 1 0 0
5 0 0 1 0
6 0 0 0 1
請參閱解決方案中的更新:'df.to_csv('path/filename.csv')#例如'C:\\ Users \\ you \\ Documents \\ filename.csv'' – NickBraunagel
該文件未被轉換。它只是在現有列之前添加另一個Id列。 –
「轉換」是什麼意思?你想用'D'代替'd'嗎? – NickBraunagel
的[虛擬變量可能的複製時不是所有的類別都存在](http://stackoverflow.com/questions/37425961/dummy-variables-when-not-all-categories-are-present) – ayhan
它被稱爲一個熱門編碼,你可以用sklearn OneHotEncoder()函數做到這一點 – mitsi
@ayhan這是一個類似的問題,但我該如何傳遞一個.csv文件,其中存在數據而不是直接傳遞數據?謝謝 –