有关read_csv和str dtype的问题

时间:2016-08-04 19:08:37

标签: python pandas

我有一个大文本文件,其中列的格式如下:

1255 32627 some random stuff which might have numbers 1245

1.我想使用read_csv为我提供一个包含三列的数据框。前两列应该是dtype uint32,第三列后面的所有内容都包含在字符串中。这就是上面的行应分为125532627some 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,如果我知道字符串的最大长度可以减少吗?

2 个答案:

答案 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)

  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)
    
  2. 我不明白这个问题。你期望你的弦很长吗? 32位Python安装仅限于2-3GB长的字符串。 64位安装非常 更大,仅受到可以填充到系统中的RAM量的限制。