我知道你可以这样做:
import pandas as pd
df = pd.read_csv('mushrooms.csv')
df.apply(lambda x: pd.factorize(x)[0])
但我想要的是将所有类别更改为0
或1
。
例如,CSV文件中的标题是favColor
和favCookie
,favColor
的选项是'红色','橙'和'绿色'以及favCookie
的选项是'巧克力'和'糖'。如果其中一行是红色'和'糖',我希望整行变成[1,0,0,0,1]
。
我看起来更像是一个库,所以每次使用CSV文件和神经网络时都很容易这样做
答案 0 :(得分:2)
使用pandas
,您可以使用pandas.get_dummies()
:
new_df = pd.get_dummies(df)
如果您想使用scikit-learn
,可以使用OneHotEncoder
:
from sklearn.preprocessing import OneHotEncoder
new_np_array = OneHotEncoder().fit_transform(df.values)
正如我所说的变量名称,get_dummies()
会返回pandas
数据框,而OneHotEncoder
会返回numpy
数组
答案 1 :(得分:0)
从CSV文件中读取的步骤:
1)读取CSV文件名
2)通过提供CSV文件名来创建TextLineDataset
3)创建解码的Parse函数,并在输入数据中进行任何预处理工作
4)使用先前步骤中创建的数据集创建批处理,重复(没有纪元)和改组
5)创建迭代器以批量获取所需的输入(即小批量)
例如代码:
from matplotlib.image import imread
def input_model_function():
csv_filename =['images.csv']
dataset = tf.data.TextLineDataset(csv_filename)
dataset = dataset.map(_parse_function)
dataset = dataset.batch(20)# you can use any number of batching
iterator = dataset.make_one_shot_iterator()
sess = tf.Session()
batch_images, batch_labels = sess.run(iterator.get_next())
return {'x':batch_images}, batch_labels
def _parse_function(line):
image, labels= tf.decode_csv(line,record_defaults=[[""], [0]])
# Decode the raw bytes so it becomes a tensor with type.
image = imread(image)# give full path name of image
return image, labels
最后将批量数据集输入模型(使用任何预制估算器或自定义估算器API创建)