And*_*den 21
我不认为大熊猫提供了这样做的方法read_csv.
也许最好的(一次通过)是使用collections.deque:
from collections import deque
from StringIO import StringIO
with open(fname, 'r') as f:
q = deque(f, 2) # replace 2 with n (lines read at the end)
In [12]: q
Out[12]: deque(['7,8,9\n', '10,11,12'], maxlen=2)
# these are the last two lines of my csv
In [13]: pd.read_csv(StringIO(''.join(q)), header=None)
Run Code Online (Sandbox Code Playgroud)
另一个值得尝试的选择是在第一遍中获取行数然后再次读取文件,使用read_csv... 跳过该行数(减去n)
Par*_*nde 10
这是一个方便的方法。非常适合我喜欢做的事情 -
import tailer as tl
import pandas as pd
import io
file = open(fname)
lastLines = tl.tail(file,15) #to read last 15 lines, change it to any value.
file.close()
df=pd.read_csv(io.StringIO('\n'.join(lastLines)), header=None)
Run Code Online (Sandbox Code Playgroud)
文件只是字节流.线不作为单独的实体存在; 它们是将某些字节视为换行符的工件.因此,您必须从文件的开头读取以按顺序标识行.
如果文件没有经常更改,并且这是您需要经常执行的操作(例如,使用不同的值n),则可以将换行符的字节偏移存储在第二个文件中.您可以使用这个小得多的文件和seek命令快速跳转到第一个文件中的给定行并从那里读取.
(某些操作系统提供面向记录的文件,其内部结构比普通平面文件更复杂.以上内容不适用于它们.)
小智 5
第三个选项是我使用的:
以某种方式找到 CSV 中的行数,然后使用跳行并读取所需的行数。
这是我的建议:
import pandas as pd
# User inputs
fname = 'test_file.csv'
tail_len = 15
# The two steps in the description
n_rows = sum(1 for row in open(fname, 'r'))
df = pd.read_csv(fname, skiprows=range(1, n_rows - tail_len))
Run Code Online (Sandbox Code Playgroud)
关于“以某种方式”,我从这里得到了这个想法。
| 归档时间: |
|
| 查看次数: |
10030 次 |
| 最近记录: |