![](/img/trans.png)
[英]How to read a CSV file line by line and store it to new CSV file on new row every time?
[英]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.