【问题标题】:Truncating column width in pandas在熊猫中截断列宽
【发布时间】:2014-04-02 02:07:33
【问题描述】:

我正在将大型 csv 文件读入 pandas,其中一些带有数千个字符的字符串列。有什么快速的方法来限制一列的宽度,即只保留前 100 个字符?

【问题讨论】:

  • 你的意思是事后,或者你想要/需要在它们甚至存储在框架中之前截断它们?
  • 在存储之前会很棒。事后申请会是最快的方式吗?
  • 现在写申请。有没有办法获取对象类型列的宽度?
  • df['string col'].apply(lambda x: x[:100]) 将只保留前 100 个字符
  • 最好检查它是否需要事先截断。似乎找不到任何给出宽度的属性。

标签: python pandas


【解决方案1】:

如果你可以将整个东西读入内存,你可以使用str方法进行向量运算:

>>> df = pd.read_csv("toolong.csv")
>>> df
   a                       b  c
0  1  1256378916212378918293  2

[1 rows x 3 columns]
>>> df["b"] = df["b"].str[:10]
>>> df
   a           b  c
0  1  1256378916  2

[1 rows x 3 columns]

另请注意,您可以使用以下方法获得具有长度的系列

>>> df["b"].str.len()
0    10
Name: b, dtype: int64

我本来想知道是不是

>>> pd.read_csv("toolong.csv", converters={"b": lambda x: x[:5]})
   a      b  c
0  1  12563  2

[1 rows x 3 columns]

会更好,但我实际上不知道转换器是逐行调用还是在整列之后调用。

【讨论】:

  • converters 被逐行调用(通过 cython 函数)。我认为str 转换会更快(您的第一个示例)
  • @Jeff:啊,很高兴知道。这意味着,如果字符串长得离谱并且您不想将其分块,则可以使用它来确保您永远不会有超过一行的多余部分。
  • 听起来不错,这只是代码检查(又名目测)。你知道这是多么可靠:)
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 2015-04-30
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2017-12-16
相关资源
最近更新 更多