簡體   English   中英

如何每隔一行讀取CSV文件

[英]How to read a CSV file every other row

如何每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

謝謝!

使用skiprows的參數read_csv

要保持偶數行:

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

您可以使用numpy將它們全部讀取到內存中並存儲每隔一行:

import numpy as np
import pandas as pd

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

最后一位[::2]表示“每隔第二個元素”。

就我個人而言,我認為最簡單的答案是(如果您只想要偶數行):

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”。 我認為這種方法比逐行讀取文件更容易,盡管如果文件很大,則可能存在可伸縮性問題。 希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM