在不使用 Pd.DataFrame 的情况下转换 Pandas DataFrame 中的 NumPy 日期

Converting NumPy Date in Pandas DataFrame without using Pd.DataFrame

我在评估中有一个问题,我必须将 NumPy 数据转换为 Pandas 数据帧类型。它还应该使用数据的 dtype 名称作为列 headers.

我不能使用 pd.DataFrame() 函数来完成这项任务,并且已经给出了我应该仍然使用 pandas 方法的地方的线索。

这是我目前的代码 -

    def convert_to_df(data):
        "converting numpy array into dataframe"
        far = data.tolist()
        return pd.Series(far).to_frame()

确实将其转换为 DataFrame ,并通过测试给出:

                                                   0
0  (2020-02-29 13:32:59, 1.23375E+18, 0.67, 0.293...
1  (2020-02-27 00:20:58, 1.23282E+18, 0.442, 0.38...
2  (2020-02-10 18:54:50, 1.22694E+18, 0.577, 0.42...
3  (2020-02-29 05:23:06, 1.23362E+18, 0.514, 0.41...
4  (2020-02-26 03:20:55, 1.23251E+18, 0.426, 0.37...

我只是对如何按顺序获得 headers 感到困惑。当我 运行 测试代码时,我的输出应该是这样的。

            created_at  ...     emotion_category
0  2020-02-29 13:32:59  ...                  joy
1  2020-02-27 00:20:58  ...                 fear
2  2020-02-10 18:54:50  ...                  joy
3  2020-02-29 05:23:06  ...  no specific emotion
4  2020-02-26 03:20:55  ...                 fear

[5 rows x 9 columns] 

我已附上问题的屏幕截图,以便您查看测试代码和措辞。 希望有人能帮忙!

我使用的数据如下所示

您可以使用 pandas 系列,我要做的是将 numpy 数组中的每一列转换为系列,例如,我有以下 numpy 数组:

data = np.array([[1, 2, 3], [4, 5, 6]])

我将使用 for 循环为每一列创建系列:

series = []
for i in range(data.shape[1]):
    series.append(pd.Series(data[:,i], name="Serie_" + str(i)))

最后,将这些系列连接到一个数据帧:

pd.concat([series[i] for i in range(data.shape[1])], axis=1)

结果:

   Serie_0  Serie_1  Serie_2
0        1        2        3
1        4        5        6

希望对您有所帮助。

试试这个:

def convert_to_df(data):
    '''convert numpy to pandas'''
    headers = ['created_at', 'tweet_ID', 'valence_intensity', 'anger_intensity', 'fear_intensity',
             'sadness_intensity', 'joy_intensity', 'sentiment_category', 'emotion_category']

    df = data[:][headers[0]].tolist()
    df = pd.Series(df).to_frame()
    df.columns = ['created_at']
    for i in range(1, len(headers)):
        newcol = data[:][headers[i]].tolist()
        newcol = pd.Series(newcol).to_frame()
        df[headers[i]] = newcol
    return df