我有一个大文本文件,其中列的格式如下:
1255 32627 some random stuff which might have numbers 1245
1.我想使用read_csv
为我提供一个包含三列的数据框。前两列应该是dtype uint32,第三列后面的所有内容都包含在字符串中。这就是上面的行应分为1255
,32627
和some random stuff which might have numbers 1245
。例如,这不会做,但至少显示dtypes:
pd.read_csv("foo.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str})
2.我的第二个问题是关于str
dtype。它使用了多少RAM,如果我知道字符串的最大长度可以减少吗?
答案 0 :(得分:1)
您可以使用Series.str.cat方法,其文档可用here:
df = pd.read_csv("foo.txt", sep=' ', header=None)
# Create a new column which concatenates all columns
df['new'] = df.apply(lambda row: row.iloc[2:].apply(str).str.cat(sep = ' '),axis=1)
df = df[[0,1,'new']]
不确定你的第二个问题是什么意思,但如果你想检查内存中字符串的大小,你可以使用
import sys
print (sys.getsizeof('some string'))
抱歉,我不知道如何知道最大长度将有助于您节省内存以及是否可能
答案 1 :(得分:1)
您需要使用pd.read_csv()
吗?下面的代码非常简单,可以根据您的要求轻松修改列值。
from numpy import uint32
from csv import reader
from pandas import DataFrame
file = 'path/to/file.csv'
with open(file, 'r') as f:
r = reader(f)
for row in r:
column_1 = uint32(row[0])
column_2 = uint32(row[1])
column_3 = ' '.join([str(col) for col in row[2::]])
data = [column_1, column_2, column_3]
frame = DataFrame(data)
我不明白这个问题。你期望你的弦很长吗? 32位Python安装仅限于2-3GB长的字符串。 64位安装非常 更大,仅受到可以填充到系统中的RAM量的限制。