组合Dataframes的两个部分:“ValueError:数组长度1与索引长度586不匹配”

时间:2015-03-16 12:30:07

标签: python pandas

我正在尝试使用CSV中的一些以前的数据帧构建一个新的数据帧,并使用类似

的方式进行一些计算
addtest = pd.DataFrame({'coordinates': 123456,
                        'level1': RainD.level,
                        'coordinates1': 789,
                        'level2':RainD2.level})

在上面的示例中,level1level2只是从CSV导入的级别,没有应用任何内容,我得到一个没有问题的新数据框,即使来自2个不同的级别CSV文件具有不同的开始和结束日期(这是有意的)。

但是,如果我尝试"相同"在我的完整脚本中,它错误

Traceback (most recent call last):
  File "standardization_loop.py", line 365, in <module>
    'SGW_month':Yearlist_sorted.level})
  File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 383, in __init__
    mgr = self._init_dict(data, index, columns, dtype=dtype)
  File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 515, in _init_dict
    dtype=dtype)
  File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 5263, in _arrays_to_mgr
     index = extract_index(arrays)
   File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 5325, in extract_index
     raise ValueError(msg)
 ValueError: array length 1 does not match index length 586

这个错误想告诉我什么?

我到那里做了什么:

Combined_df = pd.DataFrame({'Coordinates':Coordinates,
              'SGW_year':RainD_SGW.level,
              'SGW_month':Yearlist_sorted.level})

编辑(也请参阅评论):坐标只是数字,但是如果删除该部分,我仍然会收到错误,但现在更改为AssertionError: Block shape incompatible with manager。或者我第一次忽略了那种类型?但是,根据下面的测试,两个数据帧级别应该适合:

为了确保它们确实匹配并且没有重复项,我之前也查看了RainD_SGW.levelYearlist_sorted.level

Yearlist_sorted.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 586 entries, 1965-12-01 00:00:00 to 2014-09-01 00:00:00
Data columns:
level    586  non-null values
dtypes: float64(1)None
Yearlist_sorted.index.get_duplicates()
<class 'pandas.tseries.index.DatetimeIndex'>
Length: 0, Freq: None, Timezone: None
RainD_SGW.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 586 entries, 1965-12-01 00:00:00 to 2014-09-01 00:00:00
Data columns:
level    586  non-null values
dtypes: float64(1)None
RainD_SGW.index.get_duplicates()
<class 'pandas.tseries.index.DatetimeIndex'>
Length: 0, Freq: None, Timezone: None

对我好看?它们似乎在相同的日期范围内具有相同的大小,并且它们没有重复。还有什么呢?

1 个答案:

答案 0 :(得分:0)

不确定我是否可以将此作为答案,但我找到了一个解决方法(这反过来又给了我更多不同的问题,主要是如果我真的知道我到底在做什么......)

无论如何,这里是:

RainD['SGW_month'] = Yearlist_sorted
RainD['SGW_year'] = RainD_SGW
RainD['Coordinates'] = str(Coordinates)

因此,我没有尝试构建一个新的Dataframe,而是指定我想要的计算数据帧的哪些部分,而是将它全部添加到我原来的Dataframe(RainD)中,看起来它足够智能了只使用这些DATAframes中的级别。

但它对我来说似乎不对。我担心这会失败,如果我的Dataframes除了它们的索引之外只有一件事。

另外,我告诉值Coordinates是一个字符串。我以为他们已经是一个,但我觉得我错了。