【问题标题】:Pandas and linear regression: multiple y values for single x熊猫和线性回归:单个 x 的多个 y 值
【发布时间】:2015-03-12 03:52:07
【问题描述】:

我有一个 csv,其中包含一段时间内每晚的租金单价。如果单位是租用的,价格会列在日期下方。如果没有租用,价格显示为 N/A。数据结构如下:

bedrooms  day1   day2   day3...   day(n)
2          75    N/A     70       50
2          60    60      60       60
4          100   110     N/A      N/A
3          75    80      80       N/A

...等等。

我正在将这个 csv 读入 pandas。我希望能够使用 scikit-learn 中的 LinearRegression 来预测给定卧室数量的价格。你这样做:

from sklearn.linear_model import LinearRegression
model = LinearRegression()
# X is numpy array or sparse matrix of shape [n_samples,n_features]
# y is numpy array of shape [n_samples, n_targets]
model.fit(X, y)

如何使用 pandas 以正确格式获取数据?

编辑澄清:

正确的格式是将每个价格与卧室相关联,如下所示:

bedrooms  price
2          75    
2          70       
2          50
2          60 
2          60 
2          60 
2          60 
4          100
4          110
3          80
3          80

【问题讨论】:

  • DataFrame 中的每一列都是 SeriesSeries 对象是 1) 在很大程度上与 array API 兼容(因此它们应该独立工作)和 2) 可以使用numpy.array(df['column_name']) 转换为数组
  • 好的。然后我有 n 个定价数据数组(仍然需要清理)。然后呢?
  • 清理了吗?这意味着什么?提供有效的简单测试用例示例。
  • 我没有任何测试用例,但如果在拟合数据时包含值“N/A”,则会出现错误。
  • 数据帧有一个dropna 方法

标签: python pandas scikit-learn


【解决方案1】:

您可以向bedrooms 列添加索引并堆叠数据框。

拿车确定一切都有名字,整个东西是这样的:

from StringIO import StringIO
import pandas

datafile = StringIO("""\
bedrooms  day1   day2   day3     day(n)
2          75    N/A     70       50
2          60    60      60       60
4          100   110     N/A      N/A
3          75    80      80       N/A
""")

df = pandas.read_table(datafile, sep='\s+', index_col='bedrooms')
df.columns.names = ['days rented']
prices = df.stack()
prices.name = 'dollars'
prices.reset_index()

打印出来的:

    bedrooms days rented  dollars
0          2        day1       75
1          2        day3       70
2          2      day(n)       50
3          2        day1       60
4          2        day2       60
5          2        day3       60
6          2      day(n)       60
7          4        day1      100
8          4        day2      110
9          3        day1       75
10         3        day2       80
11         3        day3       80

【讨论】:

  • 啊,df.stack() 似乎是缺失的部分。非常感谢!
猜你喜欢
  • 2019-05-15
  • 2020-07-04
  • 2019-11-16
  • 2021-10-03
  • 2019-07-12
  • 2018-07-23
  • 2015-06-10
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多