熊猫数据框:保留数字列表,然后读取

时间:2019-12-24 04:12:48

标签: python pandas dataframe

我有一个数据框,其中包含数字列表(正数和负数)。我将数据帧保存到一个csv中,当我读取它时,数​​字列表是一个字符串。而且很难将其转换回列表:python抱怨方括号和减号。有没有办法保留数字列表并将其作为数字列表读回?

data = [['tom', [10,-5,3]], ['dave', [15,-1,4]], ['al', [14,-1,-1]]] 
df1 = pd.DataFrame(data, columns = ['Name', 'Points']) 
df1.to_csv("points.csv")
df2 = pd.read_csv("points.csv")

df2中的points列是一个字符串。如何将其转换为数字列表?

2 个答案:

答案 0 :(得分:1)

您可以在此处使用DataFrame.to_pickleread_pickle的pickle,因为csv数据始终是字符串:

data = [['tom', [10,-5,3]], ['dave', [15,-1,4]], ['al', [14,-1,-1]]] 
df1 = pd.DataFrame(data, columns = ['Name', 'Points']) 

df1.to_pickle("points.pkl")
df2 = pd.read_pickle("points.pkl")
print (type(df2.loc[0, 'Points']))
<class 'list'>

答案 1 :(得分:1)

不要将数据作为Python列表存储在pandas数据框内,以CSV格式写出来并回读会很麻烦,类型会被弄乱(除非您使用pickle或JSON,您可以,但为什么会不必要地造成并发症?)。

更容易简单地存储为本地熊猫数据框

df3 = pd.DataFrame({'tom': [10,-5,3], 'dave': [15,-1,4], 'al': [14,-1,-1]})

df3
   tom  dave  al
0   10    15  14
1   -5    -1  -1
2    3     4  -1

df3.to_csv('my.csv', index=False)

# Now when we read it back in, the integer columns remain integer...
df3in = pd.read_csv('my.csv')

   tom  dave  al
0   10    15  14
1   -5    -1  -1
2    3     4  -1

df3.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
tom     3 non-null int64
dave    3 non-null int64
al      3 non-null int64
dtypes: int64(3)
memory usage: 152.0 bytes