Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找不到不同数据集的两列之间的相关性_Python_Pandas_Correlation - Fatal编程技术网

Python 找不到不同数据集的两列之间的相关性

Python 找不到不同数据集的两列之间的相关性,python,pandas,correlation,Python,Pandas,Correlation,我有一个数据集,它基本上是一个列表 data = [[(datetime.datetime(2018, 12, 6, 10, 0), Decimal('7.0000000000000000')), (datetime.datetime(2018, 12, 6, 11, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 6, 12, 0), Decimal('43.6666666666666667')), (datet

我有一个数据集,它基本上是一个列表

data = [[(datetime.datetime(2018, 12, 6, 10, 0), Decimal('7.0000000000000000')), (datetime.datetime(2018, 12, 6, 11, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 6, 12, 0), Decimal('43.6666666666666667')), (datetime.datetime(2018, 12, 6, 14, 0), Decimal('8.0000000000000000')), (datetime.datetime(2018, 12, 7, 9, 0), Decimal('12.0000000000000000')), (datetime.datetime(2018, 12, 7, 10, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 7, 11, 0), Decimal('2.0000000000000000')), (datetime.datetime(2018, 12, 7, 17, 0), Decimal('2.0000000000000000'))], [(datetime.datetime(2018, 12, 6, 10, 0), 28.5), (datetime.datetime(2018, 12, 6, 11, 0), 12.75), (datetime.datetime(2018, 12, 6, 12, 0), 12.15), (datetime.datetime(2018, 12, 6, 14, 0), 12.75), (datetime.datetime(2018, 12, 7, 9, 0), 12.75), (datetime.datetime(2018, 12, 7, 10, 0), 12.75), (datetime.datetime(2018, 12, 7, 11, 0), 12.75), (datetime.datetime(2018, 12, 7, 17, 0), 12.75)]]
它基本上包含两个列表,每个列表都有一个
date
metric
列。我需要提取每个列表的度量列值,并找到它们之间的关系

注:各列表中的日期相似

首先,我将每个列表加载到pandas中,并设置日期索引

data1 = data[0]
data2 = data[1]

df1 = pd.DataFrame(data1)
df1[0] = pd.to_datetime(df1[0], errors='coerce')
df1.set_index(0, inplace=True)

df2 = pd.DataFrame(data2)
df2[0] = pd.to_datetime(df2[0], errors='coerce')
df2.set_index(0, inplace=True)
现在我合并两个数据帧(它们共享相同的日期)

现在我的数据框看起来像这样

                                     1_x    1_y
0                                              
2018-12-06 10:00:00   7.0000000000000000  28.50
2018-12-06 11:00:00   2.0000000000000000  12.75
2018-12-06 12:00:00  43.6666666666666667  12.15
2018-12-06 14:00:00   8.0000000000000000  12.75
2018-12-07 09:00:00  12.0000000000000000  12.75
2018-12-07 10:00:00   2.0000000000000000  12.75
2018-12-07 11:00:00   2.0000000000000000  12.75
2018-12-07 17:00:00   2.0000000000000000  12.75
现在我需要找到两列
1_x
1_y
之间的相关性。所以我做了这个

df.iloc[:,0].corr(df.iloc[:,1])
但是我得到了以下错误

Traceback (most recent call last):
  File "/home/souvik/Music/UI_Server2/test61.py", line 71, in <module>
    print(df.iloc[:,0].corr(df.iloc[:,1]))
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/core/series.py", line 1911, in corr
    min_periods=min_periods)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/core/nanops.py", line 77, in _f
    return f(*args, **kwargs)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/core/nanops.py", line 762, in nancorr
    return f(a, b)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/core/nanops.py", line 770, in _pearson
    return np.corrcoef(a, b)[0, 1]
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/numpy/lib/function_base.py", line 2392, in corrcoef
    c = cov(x, y, rowvar)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/numpy/lib/function_base.py", line 2302, in cov
    avg, w_sum = average(X, axis=1, weights=w, returned=True)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/numpy/lib/function_base.py", line 391, in average
    if scl.shape != avg.shape:
AttributeError: 'float' object has no attribute 'shape'
回溯(最近一次呼叫最后一次):
文件“/home/souvik/Music/UI_Server2/test61.py”,第71行,在
打印(df.iloc[:,0].corr(df.iloc[:,1]))
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/pandas/core/series.py”,第1911行,corr
最小周期=最小周期)
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/pandas/core/nanops.py”,第77行,在
返回f(*args,**kwargs)
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/pandas/core/nanops.py”,第762行,位于nancorr
返回f(a,b)
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/pandas/core/nanops.py”,第770行,位于pearson
返回np.corrcoef(a,b)[0,1]
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/numpy/lib/function_base.py”,第2392行,corrcof
c=cov(x,y,rowvar)
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/numpy/lib/function_base.py”,第2302行,cov格式
平均值,w_和=平均值(X,轴=1,权重=w,返回值=True)
文件“/home/souvik/django_test/webdev/lib/python3.5/site packages/numpy/lib/function_base.py”,平均第391行
如果scl.shape!=平均形状:
AttributeError:“float”对象没有属性“shape”

我不知道发生了什么事。我在网上看到的示例使用
df['A].corr(df['B'])
来获得
A
B
之间的相关性。那么我做错了什么呢?

从这里可以看出,您的专栏
1_x
dtype=object

df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 8 entries, 2018-12-06 10:00:00 to 2018-12-07 17:00:00
Data columns (total 2 columns):
1_x    8 non-null object
1_y    8 non-null float64
dtypes: float64(1), object(1)
memory usage: 512.0+ bytes

您的列
1_x
具有
dtype=object
,从这里可以看到:

df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 8 entries, 2018-12-06 10:00:00 to 2018-12-07 17:00:00
Data columns (total 2 columns):
1_x    8 non-null object
1_y    8 non-null float64
dtypes: float64(1), object(1)
memory usage: 512.0+ bytes

您是从哪里导入十进制的?@meW实际上这是一个sql查询输出。为了处理这个问题,我使用了
from decimal import decimal
谢谢,现在我可以从导入
decimal
的位置复制数据了?@meW实际上这是一个sql查询输出。为了处理这个问题,我使用了
from decimal import decimal
谢谢,现在我可以复制了。谢谢,现在我可以让它工作了。但是如果您看到最后的数据帧,则会丢失一些日期。我想插值,以便用适当的值覆盖缺失的日期。我尝试在最后一个数据帧上执行
df.interpolate()
,但没有任何帮助。@SouvikRay我在
df
中没有看到任何缺少的日期。但是如果需要填充任何缺少的值,其中一个选项是
ffill()
。试着发一个关于这个的新问题。哦,我是说错过了几个小时!我不这么认为@SouvikRay,似乎所有的行在时间戳中都有小时。最好发布一个新问题,这样其他人也可以给出他们的见解。嘿,谢谢,现在我得到了让它工作起来。但是如果您看到最后的数据帧,则会丢失一些日期。我想插值,以便用适当的值覆盖缺失的日期。我尝试在最后一个数据帧上执行
df.interpolate()
,但没有任何帮助。@SouvikRay我在
df
中没有看到任何缺少的日期。但是如果需要填充任何缺少的值,其中一个选项是
ffill()
。试着发一个关于这个的新问题。哦,我是说错过了几个小时!我不这么认为@SouvikRay,似乎所有的行在时间戳中都有小时。最好发布一个新问题,以便其他人也能给出自己的见解。。
df['1_x'] = df['1_x'].astype(float)
df.iloc[:,0].corr(df.iloc[:,1])
# -0.11679873531647807