簡體   English   中英

Pandas read_csv():列包​​含數據幀但被讀取為字符串

[英]Pandas read_csv(): column contains dataframe but is read as string

我有一個由 56 行和 9 列組成的熊貓數據框(df1),一列 ['Matrix'] 包含每個單元格的數據框(df2)。 保存和加載此 df1 會將 df2 轉換為字符串。 但是,我需要這是一個數據框。

我遇到了幾個解決方案(見下文),但似乎無法將這些應用於我的情況,因為我有一個包含數據幀的數據幀。

df2 由兩列('Mean'、'SD')組成,每 df1 行包含 95k 行(下面的示例(它們不是全部為 0 ;))。

我的直覺是,我的方法本身並不是最理想的。

有人可以給我一個正確方向的推動嗎?

' 平均 SD\\r\\n0 0.00 0.000000\\r\\n1 0.00 0.000000\\r\\n2 0.00 0.000000\\r\\n3 0.00 0.000000\\r\\n4 0.00 0.0\\0r\\0\\0\\0\\0.0\\0\\0.0\\0.0\\0.0\\0.0 0.000000 \\ r \\ n8 0.00 0.000000 \\ r \\ N9 ...... 0.000000 \\ r \\ n95194 0.00 0.000000 \\ r \\ n95195 0.00 0.000000 \\ r \\ n95196 0.00 0.000000 \\ r \\ n95197 0.00 0.000000 \\ r \\ n95198 0.00 0.000000 \\ r \\n95199 0.00 0.000000\\r\\n\\r\\n[95200 行 x 2 列]'

您應該使用json文件格式來保存您的DataFrame

考慮以下簡化示例:

import pandas as pd

df1 = pd.DataFrame([[0,1], [2,3]], columns=["first", "second"])
df2 = pd.DataFrame([[4,5,6], [7,8,9]])
df1["dataf"] = [df2, df2]

print("\nDataFrame df1:")
print("**************")  
print(df1)
print("\ndataf column:")
print("***************")  
print(df1["dataf"])
print("\ndataf column cell:")
print("********************")  
print(df1["dataf"][0])
print("Type of dataf cells:", type(df1["dataf"][0]))

出去:

DataFrame df1:
**************
   first  second                             dataf
0      0       1     0  1  2
0  4  5  6
1  7  8  9
1      2       3     0  1  2
0  4  5  6
1  7  8  9

dataf column:
***************
0       0  1  2
0  4  5  6
1  7  8  9
1       0  1  2
0  4  5  6
1  7  8  9
Name: dataf, dtype: object

dataf column cell:
********************
   0  1  2
0  4  5  6
1  7  8  9
Type of dataf cells: <class 'pandas.core.frame.DataFrame'>

現在使用pandas.DataFrame.to_json將我們的 DataFrame 保存為json

df1.to_json("test.json")

使用pandas.read_json加載我們的數據:

df1 = pd.read_json("test.json")

print("\nDataFrame df1:")
print("**************")  
print(df1)
print("\ndataf column:")
print("***************")  
print(df1["dataf"])
print("\ndataf column cell:")
print("********************")  
print(df1["dataf"][0])
print("Type of dataf cells:", type(df1["dataf"][0]))

出去:

DataFrame df1:
**************
   first  second                                              dataf
0      0       1  {'0': {'0': 4, '1': 7}, '1': {'0': 5, '1': 8},...
1      2       3  {'0': {'0': 4, '1': 7}, '1': {'0': 5, '1': 8},...

dataf column:
***************
0    {'0': {'0': 4, '1': 7}, '1': {'0': 5, '1': 8},...
1    {'0': {'0': 4, '1': 7}, '1': {'0': 5, '1': 8},...
Name: dataf, dtype: object

dataf column cell:
********************
{'0': {'0': 4, '1': 7}, '1': {'0': 5, '1': 8}, '2': {'0': 6, '1': 9}}
Type of dataf cells: <class 'dict'>

我們可以簡單地實現我們的列轉換為DataFrame S使用pandas.DataFrame.apply

df1["dataf"] = df1["dataf"].apply(lambda x: pd.DataFrame(x))

print("\nDataFrame df1:")
print("**************")  
print(df1)
print("\ndataf column:")
print("***************")  
print(df1["dataf"])
print("\ndataf column cell:")
print("********************")  
print(df1["dataf"][0])
print("Type of dataf cells:", type(df1["dataf"][0]))

出去:

DataFrame df1:
**************
   first  second                             dataf
0      0       1     0  1  2
0  4  5  6
1  7  8  9
1      2       3     0  1  2
0  4  5  6
1  7  8  9

dataf column:
***************
0       0  1  2
0  4  5  6
1  7  8  9
1       0  1  2
0  4  5  6
1  7  8  9
Name: dataf, dtype: object

dataf column cell:
********************
   0  1  2
0  4  5  6
1  7  8  9
Type of dataf cells: <class 'pandas.core.frame.DataFrame'>

可以看到我們的核心代碼非常簡單如下:

df1.to_json("test.json")
df1 = pd.read_json("test.json")
df1["dataf"] = df1["dataf"].apply(lambda x: pd.DataFrame(x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM