如何每隔一行读取 CSV 文件
Posted
技术标签:
【中文标题】如何每隔一行读取 CSV 文件【英文标题】:How to read a CSV file every other row 【发布时间】:2019-10-28 13:56:41 【问题描述】:如何从 CSV 文件中获取每 2 行的数据?
例如,如果我有一个看起来像这样的文件
0 1
0 23 34
1 45 45
2 78 16
3 110 78
4 48 14
5 76 23
6 55 33
7 12 13
8 18 76
如何迭代并提取每第二行以获得类似的内容并附加到新的数据帧中?
0 23 34
2 78 16
4 48 14
6 55 33
8 18 76
谢谢!
【问题讨论】:
【参考方案1】:使用read_csv
的skiprows
参数:
保持偶数行:
pd.read_csv('file.csv', skiprows=lambda x: (x != 0) and not x % 2)
保留奇数行:
pd.read_csv('file.csv', skiprows=lambda x: x % 2)
请注意,标头包含在skiprows
中,这就是为什么在偶数示例中需要x != 0
。
例子:
In [1]: import pandas as pd
...: from io import StringIO
...:
...: data = """A,B
...: a,1
...: b,2
...: c,3
...: d,4
...: e,5
...: """
In [2]: pd.read_csv(StringIO(data))
Out[2]:
A B
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
In [3]: pd.read_csv(StringIO(data), skiprows=lambda x: (x != 0) and not x % 2)
Out[3]:
A B
0 a 1
1 c 3
2 e 5
In [4]: pd.read_csv(StringIO(data), skiprows=lambda x: x % 2)
Out[4]:
A B
0 b 2
1 d 4
【讨论】:
【参考方案2】:您可以使用numpy
将它们全部读入内存并每隔一行存储一次:
import numpy as np
import pandas as pd
data = np.loadtxt(filename)
data = pd.DataFrame(data[::2])
最后一位,[::2]
,意思是“每隔一个元素”。
【讨论】:
【参考方案3】:就个人而言,我认为最简单的答案(如果您只想要偶数行)是:
import pandas as pd
df = pd.read_csv('csv_file.csv')
rows_we_want = [row for i,row in enumerate(df.index) if not i % 2]
df_new = df.loc[rows_we_want]
enumerate() 是 Python 中一个强大的函数,“if not i % 2”仅在行号 (i) 为偶数时为 True。如果您想要奇数行,则可以删除“不”。我认为这种方法比逐行读取文件更容易,尽管如果您的文件非常大,则可能存在可伸缩性问题。希望这会有所帮助
【讨论】:
以上是关于如何每隔一行读取 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
Python如何读取csv文件某一列的每一行数据,并判断该数值是不是满足条件?