AttributeError:模块“pandas”没有属性“to_csv”
Posted
技术标签:
【中文标题】AttributeError:模块“pandas”没有属性“to_csv”【英文标题】:AttributeError: module 'pandas' has no attribute 'to_csv' 【发布时间】:2016-11-28 17:13:21 【问题描述】:我像这样从 csv 文件中提取了一些行
pd.DataFrame(CV_data.take(5), columns=CV_data.columns)
并对其执行了一些功能。现在我想再次将它保存在 csv 中,但它给出了错误module 'pandas' has no attribute 'to_csv'
我正在尝试像这样保存它
pd.to_csv(CV_data, sep='\t', encoding='utf-8')
这是我的完整代码。如何将结果数据保存在 csv 或 excel 中?
# Disable warnings, set Matplotlib inline plotting and load Pandas package
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
import pandas as pd
pd.options.display.mpl_style = 'default'
CV_data = sqlContext.read.load('Downloads/data/churn-bigml-80.csv',
format='com.databricks.spark.csv',
header='true',
inferSchema='true')
final_test_data = sqlContext.read.load('Downloads/data/churn-bigml-20.csv',
format='com.databricks.spark.csv',
header='true',
inferSchema='true')
CV_data.cache()
CV_data.printSchema()
pd.DataFrame(CV_data.take(5), columns=CV_data.columns)
from pyspark.sql.types import DoubleType
from pyspark.sql.functions import UserDefinedFunction
binary_map = 'Yes':1.0, 'No':0.0, True:1.0, False:0.0
toNum = UserDefinedFunction(lambda k: binary_map[k], DoubleType())
CV_data = CV_data.drop('State').drop('Area code') \
.drop('Total day charge').drop('Total eve charge') \
.drop('Total night charge').drop('Total intl charge') \
.withColumn('Churn', toNum(CV_data['Churn'])) \
.withColumn('International plan', toNum(CV_data['International plan'])) \
.withColumn('Voice mail plan', toNum(CV_data['Voice mail plan'])).cache()
final_test_data = final_test_data.drop('State').drop('Area code') \
.drop('Total day charge').drop('Total eve charge') \
.drop('Total night charge').drop('Total intl charge') \
.withColumn('Churn', toNum(final_test_data['Churn'])) \
.withColumn('International plan', toNum(final_test_data['International plan'])) \
.withColumn('Voice mail plan', toNum(final_test_data['Voice mail plan'])).cache()
pd.DataFrame(CV_data.take(5), columns=CV_data.columns)
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.tree import DecisionTree
def labelData(data):
# label: row[end], features: row[0:end-1]
return data.map(lambda row: LabeledPoint(row[-1], row[:-1]))
training_data, testing_data = labelData(CV_data).randomSplit([0.8, 0.2])
model = DecisionTree.trainClassifier(training_data, numClasses=2, maxDepth=2,
categoricalFeaturesInfo=1:2, 2:2,
impurity='gini', maxBins=32)
print (model.toDebugString())
print ('Feature 12:', CV_data.columns[12])
print ('Feature 4: ', CV_data.columns[4] )
from pyspark.mllib.evaluation import MulticlassMetrics
def getPredictionsLabels(model, test_data):
predictions = model.predict(test_data.map(lambda r: r.features))
return predictions.zip(test_data.map(lambda r: r.label))
def printMetrics(predictions_and_labels):
metrics = MulticlassMetrics(predictions_and_labels)
print ('Precision of True ', metrics.precision(1))
print ('Precision of False', metrics.precision(0))
print ('Recall of True ', metrics.recall(1))
print ('Recall of False ', metrics.recall(0))
print ('F-1 Score ', metrics.fMeasure())
print ('Confusion Matrix\n', metrics.confusionMatrix().toArray())
predictions_and_labels = getPredictionsLabels(model, testing_data)
printMetrics(predictions_and_labels)
CV_data.groupby('Churn').count().toPandas()
stratified_CV_data = CV_data.sampleBy('Churn', fractions=0: 388./2278, 1: 1.0).cache()
stratified_CV_data.groupby('Churn').count().toPandas()
pd.to_csv(CV_data, sep='\t', encoding='utf-8')
【问题讨论】:
【参考方案1】:to_csv
是 DataFrame
对象的方法,而不是 pandas
模块的方法。
df = pd.DataFrame(CV_data.take(5), columns=CV_data.columns)
# whatever manipulations on df
df.to_csv(...)
您的代码中还有一行 pd.DataFrame(CV_data.take(5), columns=CV_data.columns)
。
这一行创建了一个数据框,然后将其丢弃。即使您成功调用 to_csv
,您对 CV_data
的任何更改都不会反映在该数据帧中(因此也不会反映在输出的 csv 文件中)。
【讨论】:
【参考方案2】:这样就可以了!
#Create a DataFrame:
new_df = pd.DataFrame('id': [1,2,3,4,5], 'LETTERS': ['A','B','C','D','E'], 'letters': ['a','b','c','d','e'])
#Save it as csv in your folder:
new_df.to_csv('C:\\Users\\You\\Desktop\\new_df.csv')
【讨论】:
【参考方案3】:解决方案- 你应该写 df.to_csv 而不是 pd.to_csv
理由- to_csv 是一个对象的方法,它是一个 df(DataFrame);而 pd 是 Panda 模块。
因此,您的代码无法运行并抛出此错误“ AttributeError: 模块 'pandas' 没有属性 'to_csv'"
【讨论】:
感谢您为 Stack Overflow 做出贡献。但是,这个答案似乎没有添加任何新内容。您提到的所有内容都已在 4 年多前发布的已接受答案中进行了解释,此时有 11 个赞成票。回答老问题时,请确保添加新内容。此外,您可能希望改进帖子的格式。如果您不知道如何操作,请参阅Markdown Editing Help。以上是关于AttributeError:模块“pandas”没有属性“to_csv”的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:模块“pandas”没有属性“read_xml”或“to_xml”
Python查看pandas版本报错:AttributeError: module ‘pandas‘ has no attribute ‘_version_‘
解决AttributeError:模块'pandas'没有使用command-prompt或pycharm属性'core'
AttributeError:模块“numpy”没有属性“版本”
AttributeError:模块“numpy”没有属性“__version__”
Seaborn 的异常 - Pandas:AttributeError:'DatetimeIndex' 对象没有属性'mean'