這篇文章是從熊貓到_csv 輸出引用問題的后續(xù)。比如說,我用文本數據創(chuàng)建了一個數據框。此文本數據存儲為字符串列表:In [1]: import pandas as pdIn [2]: text = ['this', 'is', '"out text"'] ...: df_pre = pd.DataFrame(index=['1'], columns=['one','two']) ...: df_pre.loc['1','one'] = 123 ...: df_pre.loc['1','two'] = text檢查預讀數據框的列:In [3]: df_preOut[3]: one two1 123 [this, is, "out text"]In [4]: df_pre.two.iloc[0]Out[4]: ['this', 'is', '"out text"']這正是我想要的:df.two是一個字符串列表,并且保留了字符串元素中的引號。但是當我寫入然后將 df 作為 csv 讀取時:In [5]: df_pre.to_csv('foo.txt', index=False)In [5]: df_post = pd.read_csv('foo.txt')我看到df.two已經不同代表,以便有更多的現在報價在后-讀取數據幀:In [6]: df_postOut[6]: one two0 123 ['this', 'is', '"out text"']和這里:In [7]: df_post.two.iloc[0]Out[7]: '[\'this\', \'is\', \'"out text"\']'這樣做的問題是,如果我想df.two為每一行遍歷列中的每個字符串元素,我必須處理包裝每個元素的附加引號。所以,如果我想計算“這個”發(fā)生了多少次,使用post數據框,我會得到 0。我的問題:為什么會發(fā)生這種情況?我怎樣才能防止它發(fā)生?我已經嘗試了所有級別的引用(即 [0,3]),但無濟于事。我的目標是處理多行文本數據(標記化、詞干提取等),并以 csv 格式保存工作以供以后操作。作為后續(xù),我希望post看起來像pre:前(沒有額外的報價):In [8]: df_preOut[8]: one two1 123 [this, is, "out text"]發(fā)表(附有額外引文):In [9]: df_postOut[9]: one two0 123 ['this', 'is', '"out text"']解決方案df_post.two = df_post.two.apply(eval)
1 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
CSV 需要能夠以可以重新加載的方式存儲數據,因此它會轉義有意義的字符(特別是逗號,這是默認的列分隔符,以及單引號,否則會終止您的細繩)。
要將其從轉義格式轉換回,您可以使用 eval:
input = '[\'this\', \'is\', \'"out text"\']' output = eval(input)
該操作也可以在數據幀的整個列上執(zhí)行。
添加回答
舉報
0/150
提交
取消