Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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_Matlab_Dataframe - Fatal编程技术网

Python 数据帧中的键/值对

Python 数据帧中的键/值对,python,pandas,matlab,dataframe,Python,Pandas,Matlab,Dataframe,我创建了一个数据框,它是通过合并多个MATLAB.mat文件,然后将合并后的词典列表加载到pandas来创建的 KEY_COLUMN VALUE_COLUMN 0 [[[KEY1]], [[KEY2]], [[KEY3]], [[KEY4]]] [[VALUE], [VALUE], [VALUE], [VALUE]] 1 [[[KEY2]], [[KEY3]], [[KEY1]], [[KEY4]]]

我创建了一个数据框,它是通过合并多个MATLAB
.mat
文件,然后将合并后的词典列表加载到pandas来创建的

    KEY_COLUMN                                  VALUE_COLUMN
0   [[[KEY1]], [[KEY2]], [[KEY3]], [[KEY4]]]    [[VALUE], [VALUE], [VALUE], [VALUE]]
1   [[[KEY2]], [[KEY3]], [[KEY1]], [[KEY4]]]    [[VALUE], [VALUE], [VALUE], [VALUE]]
2   [[[KEY1]], [[KEY3]], [[KEY4]], [[KEY2]]]    [[VALUE], [VALUE], [VALUE], [VALUE]]

问题在于键(以及连续值)的顺序不同。它在当前行之间有所不同

如何做到这一点?
非常感谢

我使用了以下方法来解决这个问题:

df = pd.DataFrame({'TYPE': {0: np.array([[np.array(['START'], dtype='<U5')],[np.array(['DIST'], dtype='<U6')],[np.array(['DISTFALSE'], dtype='<U7')],[np.array(['DISTTRUE'], dtype='<U7')],[np.array(['ENCFALSE'], dtype='<U11')],[np.array(['ENCTRUE'], dtype='<U12')]], dtype=object),
  1: np.array([[np.array(['DISTFALSE'], dtype='<U5')],[np.array(['START'], dtype='<U10')],[np.array(['DIST'], dtype='<U11')],[np.array(['DISTTRUE'], dtype='<U11')],[np.array(['ENCTRUE'], dtype='<U10')],[np.array(['ENCFALSE'], dtype='<U11')]], dtype=object)},
 'TIME': {0: np.array([[ 24413],[ 27481],[ 29382],[ 31923],[ 31249],[ 34690]]),
  1: np.array([[ 364582],[ 31234],[ 43123],[ 24444],[ 55551],[ 12355]])}})

# Assuming a df as shown in the problem statement

#Initialize an empty dictionary to hold extracted keys and values
keyvals = {}
    
for i in range(0, df.shape[0]):
    keyrow = df.iloc[i, 0].flatten()
    valrow = df.iloc[i, 1].flatten()
    for j,k in zip(keyrow, valrow):
        try:
            keyvals[j].append(k)
        except:
            keyvals[j] = []
            keyvals[j].append(k)
        finally:
            pass

finDf = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in keyvals.items()]))

我已使用以下方法来解决此问题:

df = pd.DataFrame({'TYPE': {0: np.array([[np.array(['START'], dtype='<U5')],[np.array(['DIST'], dtype='<U6')],[np.array(['DISTFALSE'], dtype='<U7')],[np.array(['DISTTRUE'], dtype='<U7')],[np.array(['ENCFALSE'], dtype='<U11')],[np.array(['ENCTRUE'], dtype='<U12')]], dtype=object),
  1: np.array([[np.array(['DISTFALSE'], dtype='<U5')],[np.array(['START'], dtype='<U10')],[np.array(['DIST'], dtype='<U11')],[np.array(['DISTTRUE'], dtype='<U11')],[np.array(['ENCTRUE'], dtype='<U10')],[np.array(['ENCFALSE'], dtype='<U11')]], dtype=object)},
 'TIME': {0: np.array([[ 24413],[ 27481],[ 29382],[ 31923],[ 31249],[ 34690]]),
  1: np.array([[ 364582],[ 31234],[ 43123],[ 24444],[ 55551],[ 12355]])}})

# Assuming a df as shown in the problem statement

#Initialize an empty dictionary to hold extracted keys and values
keyvals = {}
    
for i in range(0, df.shape[0]):
    keyrow = df.iloc[i, 0].flatten()
    valrow = df.iloc[i, 1].flatten()
    for j,k in zip(keyrow, valrow):
        try:
            keyvals[j].append(k)
        except:
            keyvals[j] = []
            keyvals[j].append(k)
        finally:
            pass

finDf = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in keyvals.items()]))

让我们通过映射列表中的键值对并使用
np.squesh
删除单个维度来创建一个新的数据帧:

df1 = pd.DataFrame([dict(zip(*map(np.squeeze, v))) for v in df.to_numpy()])
结果:

# for sample data
    KEY1   KEY2   KEY3   KEY4
0  VALUE  VALUE  VALUE  VALUE
1  VALUE  VALUE  VALUE  VALUE
2  VALUE  VALUE  VALUE  VALUE

# for actual data
   START   DIST  DISTFAL  DISTTRU  ENCFALSE  ENCTRUE     DISTF  DISTTRUE
0  24413  27481  29382.0  31923.0     31249    34690       NaN       NaN
1  31234  43123      NaN      NaN     12355    55551  364582.0   24444.0

让我们通过映射列表中的键值对并使用
np.squesh
删除单个维度来创建一个新的数据帧:

df1 = pd.DataFrame([dict(zip(*map(np.squeeze, v))) for v in df.to_numpy()])
结果:

# for sample data
    KEY1   KEY2   KEY3   KEY4
0  VALUE  VALUE  VALUE  VALUE
1  VALUE  VALUE  VALUE  VALUE
2  VALUE  VALUE  VALUE  VALUE

# for actual data
   START   DIST  DISTFAL  DISTTRU  ENCFALSE  ENCTRUE     DISTF  DISTTRUE
0  24413  27481  29382.0  31923.0     31249    34690       NaN       NaN
1  31234  43123      NaN      NaN     12355    55551  364582.0   24444.0


您能否提供一些数据帧和所需结果的示例(使用实名而不仅仅是键值)请使用
df.head(5).to_dict()
提供示例数据,因为您有嵌套值。如果加载文件会产生这样的结果,则最好以不同的方式加载文件,不要在事后试图挽救这个混乱的数据帧。@HenryYik刚刚添加了它。您可以提供一些数据帧示例和所需结果(使用实名而不仅仅是键值)吗?请使用
df.head(5).to_dict()
提供示例数据,因为您有嵌套的值。如果加载文件会得到这样的结果,可能最好以另一种方式加载文件,而不是事后试图解救这个混乱的数据帧。@HenryYik刚刚添加了itTypeError:Unhabable type:'numpy.ndarray'@thisgoy根据您提供的示例数据,代码对我来说运行良好…抱歉,my bad:PTypeError:Unhabable type:'numpy.ndarray'@这家伙根据您提供的示例数据,代码对我来说运行良好…抱歉,我的bad:PAttributeError:'numpy.ndarray'对象没有属性'index',我定义了自己的字典来创建与您类似的数据帧,但现在您也添加了类型,因此此解决方案需要更新。谢谢!更改为bitUpdated,请立即检查。AttributeError:'numpy.ndarray'对象没有属性'index'。好吧,我定义了自己的字典来创建与您类似的数据帧,但现在您也添加了类型,因此此解决方案需要更新。谢谢!更改了一点,请现在查看。