pd.pivot_table 引入 NaN

问题描述 投票:0回答:0

我是 python 的新手,我希望能在这里得到一些帮助。

我想使用

pd.pivot_table
将我的数据从长格式转换为宽格式。

我的数据是这样的:

  TimeStamp [us] Source Channel Label Value [pV] Spike
0              1                   A1          0     0
1              2                   A1      -1400     1
2              3                   A1          0     0
3              1                   B1      -1400     1
4              2                   B1          0     0
5              3                   B1          0     0

我想要这样

TimeStamp [us]          1    2    3
Source Channel Label               
A1                    0.0  1.0  0.0
B1                    1.0  0.0  0.0

[此处重现一些代码:]

#read in example
example_1 = {'TimeStamp [us]': ["1", "2", "3", "1", "2", "3",],
            'Source Channel Label': ["A1", "A1", "A1","B1", "B1", "B1"],
            'Value [pV]': ["0", "-1400", "0","-1400", "0", "0"],
            'Spike': ["0", "1", "0", "1","0", "0"]}

#convert to dataframe
example_1 = pd.DataFrame(example_1)

#convert to wide format - works 
example_wide = pd.pivot_table(example_1, index='Source Channel Label', columns = 'TimeStamp [us]',values = 'Spike') #Reshape from long to wide

print(example_wide)

在这个例子中它工作正常。但是,当我在我的真实数据上使用此代码时(请参见下面的示例),会引入许多 NaN。任何想法为什么以及最重要的是如何解决它?

       TimeStamp [µs] Source Channel Label  Value [pV]  Spike
0              402600                  F10           0    0.0
1              402700                  F10           0    0.0
2              402800                  F10           0    0.0
3              402900                  F10           0    0.0
4              403000                  F10     -149012    1.0
              ...                  ...         ...    ...
845142      299700800                  G10           0    0.0
845143      299700900                  G10           0    0.0
845144      299701000                  G10           0    0.0
845145      299701100                  G10           0    0.0
845146      299701200                  G10           0    0.0

[825902 rows x 4 columns]

转换为宽:

week6_233C_1_wide = pd.pivot_table(week6_233C_1, index='Source Channel Label', columns = 'TimeStamp [µs]',values = 'Spike') #Reshape from long to wide 

TimeStamp [µs]        1000  10000  100000  ...  99999300  99999400  99999500
Source Channel Label                       ...                              
A1                     NaN    NaN     NaN  ...       NaN       NaN       NaN
A10                    NaN    NaN     NaN  ...       0.0       0.0       0.0
A2                     NaN    NaN     NaN  ...       NaN       NaN       NaN
A3                     NaN    NaN     NaN  ...       NaN       NaN       NaN
A4                     NaN    NaN     NaN  ...       NaN       NaN       NaN
                   ...    ...     ...  ...       ...       ...       ...
M5                     NaN    NaN     NaN  ...       NaN       NaN       NaN
M6                     NaN    NaN     NaN  ...       NaN       NaN       NaN
M7                     NaN    NaN     NaN  ...       NaN       NaN       NaN
M8                     NaN    NaN     NaN  ...       NaN       NaN       NaN
M9                     NaN    NaN     NaN  ...       NaN       NaN       NaN

[114 rows x 528921 columns]
python pandas dataframe pivot-table nan
© www.soinside.com 2019 - 2024. All rights reserved.