[英]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.