如何每隔一行读取CSV文件

时间:2019-06-13 23:04:06

标签: python pandas numpy data-science

如何每2行从CSV文件中获取数据?

例如,如果我有一个看起来像这样的文件

  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

谢谢!

3 个答案:

答案 0 :(得分:2)

使用read_csvskiprows参数:

要保持偶数行:

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

答案 1 :(得分:1)

您可以使用numpy将它们全部读取到内存中并存储每隔一行:

import numpy as np
import pandas as pd

data = np.loadtxt(filename)
data = pd.DataFrame(data[::2])

最后一位[::2]的意思是“占用第二个元素”。

答案 2 :(得分:0)

我个人认为,最简单的答案是(如果只希望使用偶数行):

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中的强大功能,并且当行号(i)为偶数时,“ if if i%2”仅是True。如果要改用奇数行,则可以删除“ not”。我认为这种方法比逐行读取文件更容易,尽管如果文件很大,则可能存在可伸缩性问题。希望这会有所帮助