我有一个数据框,其中包含数字列表(正数和负数)。我将数据帧保存到一个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列是一个字符串。如何将其转换为数字列表?
答案 0 :(得分:1)
您可以在此处使用DataFrame.to_pickle
和read_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