Python DataFrame具有浮点值,但对其调用_csv()会生成一个空的csv
考虑我的以下代码:Python DataFrame具有浮点值,但对其调用_csv()会生成一个空的csv,python,csv,pandas,dataframe,Python,Csv,Pandas,Dataframe,考虑我的以下代码: columns = ['tf-idf','bag_of_words'] index = ['MultinomialNB', 'LinearSVC', 'LogisticRegression', \ 'DecisionTreeClassifier','MLPClassifier'] df = pd.DataFrame(columns = columns, index = index) estimators_dict = OrderedDict([('Multi
columns = ['tf-idf','bag_of_words']
index = ['MultinomialNB', 'LinearSVC', 'LogisticRegression', \
'DecisionTreeClassifier','MLPClassifier']
df = pd.DataFrame(columns = columns, index = index)
estimators_dict = OrderedDict([('MultiNomialNB', MultinomialNB()), \
('LinearSVC', LinearSVC()), \
('LogisticRegression', LogisticRegression()), \
('DecisionTreeClassifier', DecisionTreeClassifier()), \
('MLPClassifier',MLPClassifier(max_iter=10))])
transformers_dict = OrderedDict([('tf-idf', TfidfVectorizer(max_features=500)), \
('bag_of_words', CountVectorizer())])
steps = []
for transformer_name, transformer in transformers_dict.items():
steps.append((transformer_name, transformer))
for estimator_name, estimator in estimators_dict.items():
steps.append((estimator_name, estimator))
model = Pipeline(steps)
predicted_labels = cross_val_predict(model, all_features,all_labels, cv=5)
# f1 is float
f1 = f1_score(all_labels, predicted_labels, average = 'weighted')
# writing to DataFrame
df[transformer_name][estimator_name] = round(f1,2)
# This correctly shows the value which just written
print(str(df[str(transformer_name)][str(estimator_name)])) # line a
del steps[1]
del steps[0]
# but writing to csv create a file with no values whatsoever
df.to_csv('classification_results_f1score') # line b
快速小上下文:在我的分类任务中,我使用了一组特征变换器和另一组sklearn分类器。我正在运行这两组的所有可能组合,以查看哪种型号的性能最好
我正在计算每个模型的f1分数(浮点值),并将其存储在数据帧中。该值已成功写入数据帧。我可以通过访问它来验证这一点。(a行)
但在所有模型运行结束后(两个for循环结束),当我将数据帧写入csv时,它将生成一个csv,如下所示:
,tf-idf,bag_of_words
MultinomialNB,,
LinearSVC,,
LogisticRegression,,
DecisionTreeClassifier,,
MLPClassifier,,
这里的问题是什么?为什么csv中没有显示值?如果在
to_csv()
中指定float_格式
,会发生什么情况?@Khris仍然是一样的。另一方面,为什么不在内部for循环中执行步骤=[(transformer_name,transformer),(assistator_name,assistator)]
,并使用df.loc[assistator_name,transformer_name]
而不是df[][]
。尤其是此df[][]
可能会导致视图和副本出现一些奇怪的问题。另外,print(str(df[str(transformer_name)][str(assistor_name)])
包含许多不必要的str()
调用,在最后说什么print(df)
来查看df
是空的,还是to_csv
是空的wonky@PaleBlueDot我在评论队列中偶然发现了这一点。就我个人而言,我并不觉得这个问题离题,而是投票决定不讨论。尽管如此,我还是建议你克制自己,不要用某种语调发表评论,因为这可能会被负面解读。至于问题本身,您是否尝试模拟数据帧并从中构建CSV?或者可能将f1测量值保存为浮点数,并将中的十进制精度配置为\u csv
?如果在到\u csv()
中指定浮点数格式,会发生什么情况?@Khris仍然是一样的。另一方面,为什么不在内部for循环中执行步骤=[(变压器名称,变压器),(估计器名称,估计器)]
,并使用df.loc[estimator\u name,transformer\u name]
代替df[][]
。尤其是此df[][]
可能会导致视图和副本出现一些奇怪的问题。另外,print(str(df[str(transformer_name)][str(assistor_name)])
包含许多不必要的str()
调用,在最后说什么print(df)
来查看df
是空的,还是to_csv
是空的wonky@PaleBlueDot我在评论队列中偶然发现了这一点。就我个人而言,我并不觉得这个问题离题,而是投票决定不讨论。尽管如此,我还是建议你克制自己,不要用某种语调发表评论,因为这可能会被负面解读。至于问题本身,您是否尝试模拟数据帧并从中构建CSV?或者将f1测量值保存为浮点数,并将中的十进制精度配置为\u csv
?