Pandas.read_csv:缺少1个必需的位置参数:' x'

时间:2018-01-22 08:34:04

标签: python pandas csv

我正在开发python中的预测模型。该模型应该使用给定的.csv绘制图形,但我在绘制图形时遇到错误。

绘图代码

from pandas import read_csv
from pandas.core import datetools
from matplotlib import pyplot
from statsmodels.tsa.arima_model import ARIMA
from sklearn.metrics import mean_squared_error



def parser(x):
    return datetools('190' + x, '%Y-%m')


series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser())
x = series.values
size = int(len(x) * 0.66)
train, test = x[0:size], x[size:len(x)]
history = [x for x in train]
predictions = list()
for t in range(len(test)):
    model = ARIMA(history, order=(5, 1, 0))
    model_fit = model.fit(disp=0)
    output = model_fit.forecast()
    yhat = output[0]
    predictions.append(yhat)
    obs = test[t]
    history.append(obs)
    print('predicted=%f, expected=%f' % (yhat, obs))
error = mean_squared_error(test, predictions)
print('Test MSE: %.3f' % error)
# plot
pyplot.plot(test)
pyplot.plot(predictions, color='red')
pyplot.show()

错误

line 13, in <module>
    series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser())
TypeError: parser() missing 1 required positional argument: 'x'

CSV

"Month","Sales of shampoo over a three year period"
"1-01",266.0
"1-02",145.9
"2-05",191.4
"2-06",287.0
Sales of shampoo over a three year period

2 个答案:

答案 0 :(得分:2)

当您编写read_csv(...., date_parser=parser())时,会调用parser函数。由于parser需要参数x,因此会出现TypeError。

您需要传递该功能,而无需调用它:

series = read_csv(..., date_parser=parser)

答案 1 :(得分:-1)

也许你应该像这样添加x参数

                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        for (DataSnapshot child : dataSnapshot.getChildren()) {

                            if (child.getValue(User.class).getUsername().equals(username)) {
                                Toast.makeText(OnBoardingActivity.this, "username already exists!", Toast.LENGTH_SHORT).show();
                                return;
                            }
                        }

                        Log.d(TAG, "TELL APP TO CREATE NEW USER");
                        String tempUid = mFBUsers.push().getKey();
                        user = new User(tempUid, username, password, number);

                        // save user data locally before pushing to Firebase
                        SerializableHelper.saveDataToFile(OnBoardingActivity.this, user);
                        mFBUsers.child(tempUid).setValue(user);
                    }