我有大型CSV,我只对这些行的子集感兴趣。特别是,我想读取在满足特定条件之前发生的所有行。
例如,如果read_csv
将产生数据框:
A B C
1 34 3.20 'b'
2 24 9.21 'b'
3 34 3.32 'c'
4 24 24.3 'c'
5 35 1.12 'a'
...
1e9 42 2.15 'd'
有什么方法可以读取csv中的所有行,直到col B超过10。在上面的示例中,我想读入:
A B C
1 34 3.20 'b'
2 24 9.21 'b'
3 34 3.32 'c'
4 24 24.3 'c'
我知道在读入数据帧后如何将这些行扔掉,但是到现在为止,我已经花了所有的计算来读入它们。在读取csv之前,我无法访问最后一行的索引请不要跳过脚)
您可以分批读取csv。由于pd.read_csv
在chunksize
指定参数时将返回迭代器,因此您可以使用它itertools.takewhile
来读取所需数量的块,而无需读取整个文件。
import itertools as IT
import pandas as pd
chunksize = 10 ** 5
chunks = pd.read_csv(filename, chunksize=chunksize, header=None)
chunks = IT.takewhile(lambda chunk: chunk['B'].iloc[-1] < 10, chunks)
df = pd.concat(chunks)
mask = df['B'] < 10
df = df.loc[mask]
或者,为了避免不得不df.loc[mask]
从最后一个块中删除不需要的行,也许更干净的解决方案是定义一个自定义生成器:
import itertools as IT
import pandas as pd
def valid(chunks):
for chunk in chunks:
mask = chunk['B'] < 10
if mask.all():
yield chunk
else:
yield chunk.loc[mask]
break
chunksize = 10 ** 5
chunks = pd.read_csv(filename, chunksize=chunksize, header=None)
df = pd.concat(valid(chunks))
问题内容: 对此有很多问题,但是对于如何将xlsb文件读入熊猫还没有简单的答案。是否有捷径可寻? 问题答案: 随着pandas-的发布,增加了对二进制Excel文件的支持。 笔记: 您将需要升级熊猫- 您将需要安装-
问题内容: 使用此DataFrame,当等于零时如何有条件地将其设置为0 ? 换句话说,在DataFrame上说ColumnA = x然后ColumnB = y否则ColumnB = ColumnB的正确方法是什么? 问题答案:
我正在运行一个程序,可以处理30000个类似的文件。他们中的一些人正在停止并产生这个错误...
主要内容:CSV文件读取,json读取文件,SQL数据库读取当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读取数据的方法: read_csv() 用于读取文本文件 read_json() 用于读取 json 文件 read_sql_query() 读取 sql 语句的, 本节将对上述方法做详细介绍。 CSV文件读取 CSV 又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格数据
问题内容: [编辑] 我使用 D3 解决了这个问题,不用了,谢谢! 所以我有一个看起来像这样的csv文件,我需要将本地csv文件导入到我的客户端javascript中: 我最终需要解析它并输出如下内容: 但就目前而言,我仍然只是将其导入javascript。 我当前的代码如下所示: 我已经研究并找到了一些关于的有用链接,但是我是javascript的新手,我并不完全了解它。我应该使用Ajax吗?F
问题内容: 我可能在做一些非常愚蠢的事情,但是我很沮丧。 我有一个数据框,我想用超过零的值替换特定列中的值。我以为这是实现此目标的一种方式: 如果将通道复制到新的数据框中,这很简单: 这完全符合我的要求,但似乎无法与通道一起用作原始数据帧的一部分。 问题答案: 可以在0.20.0之前的熊猫版本上正常工作,但是由于pandas为0.20.0 ,因此不推荐使用,因此应避免使用它。而是可以使用或索引器。