Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从.csv文件中提取特定行并写入另一个文件_Python_Pandas_Csv_Numpy_Anaconda - Fatal编程技术网

Python 如何从.csv文件中提取特定行并写入另一个文件

Python 如何从.csv文件中提取特定行并写入另一个文件,python,pandas,csv,numpy,anaconda,Python,Pandas,Csv,Numpy,Anaconda,我有类似以下内容的.csv文件: x, y, z 1, 10, 45 2, 0, 34 4, 15, 34 5, 99, 38 6, 13, 23 5, 99, 38 6, 13, 23 . . . 1000, 234, 678 5.000581861276573, 6.234 10.00211537343025, 1.232 import pandas as pd df = pd.read_csv('input.c

我有类似以下内容的.csv文件:

x,   y,   z  
1,  10,   45 
2,   0,   34
4,  15,   34
5,  99,   38
6,  13,   23
5,  99,   38
6,  13,   23
.    .     .
1000, 234, 678
5.000581861276573,  6.234
10.00211537343025,  1.232
import pandas as pd
df = pd.read_csv('input.csv')
现在,我想写出x列的行,这可以通过5来形成这个.csv文件

以下是有关该文件的更多详细信息:

x,                  y
0.0000123219872323, 1.213
.                     .
4.991414887967266,  8.123
4.996324047550014,  2.323
5.000581861276573,  6.234
5.006295444400881,  9.234
5.029657671211434,  1.219
5.034806828096650,  1.123
.                   .
9.997414351064347,  1.345
10.00211537343025,  1.232
10.00675672507283,  2.234
10.01201110041457,  1.003
.                   .
这是我要处理的真实文件。我必须从这个.csv文件中提取行。特别是,可以被5除的列值行

我的输出应该如下所示:

x,   y,   z  
1,  10,   45 
2,   0,   34
4,  15,   34
5,  99,   38
6,  13,   23
5,  99,   38
6,  13,   23
.    .     .
1000, 234, 678
5.000581861276573,  6.234
10.00211537343025,  1.232
import pandas as pd
df = pd.read_csv('input.csv')
不是5、10等值的两倍。一旦提取出一个5值,
它应该被5整除,在这种情况下,它应该是10

你的答案很宽泛,需要更多解释。这也有可能在StackOverflow的其他帖子中得到了回答

对你的问题有一个非常基本的回答:

to_print = [1, 5, 10, 1000]

with open('input_file.csv', 'r') as fr:
    with open('write_here.csv', 'w') as fw:
        for i, row in enumerate(fr):
            if i in to_print:
                 fw.write(row)
这只是将您在
中指定的每一行写入另一个csv文件

如果你想在0到1000之间打印每条第五行,你可以考虑设置<代码> toSuffel=范围(0, 1000, 5)< /代码>,或者,如果你不知道文件的行数:

with open('input_file.csv', 'r') as fr:
    with open('write_here.csv', 'w') as fw:
        for i, row in enumerate(fr):
            if i % 5 == 0:
                 fw.write(row)
编辑,现在用最接近列表输入的值写行

import pandas as pd

df = pd.read_csv('lines.txt', header=None)
archive_out = open('out.txt', 'w')
inputs = (1, 5, 10)

for input in inputs:

    archive_out.write(str(df.ix[(df[0] - input).abs().argsort()[:1]].values[0])[1:-1].strip() + '\n')

archive_out.close()

如果你想写下第五行,你可以简单地做

df.iloc[::5, :].to_csv('file_name.csv')
其中,
df
是这样创建的数据帧:

x,   y,   z  
1,  10,   45 
2,   0,   34
4,  15,   34
5,  99,   38
6,  13,   23
5,  99,   38
6,  13,   23
.    .     .
1000, 234, 678
5.000581861276573,  6.234
10.00211537343025,  1.232
import pandas as pd
df = pd.read_csv('input.csv')
否则,你也可以这样做

# define all indexes here
out_rows = [1, 5]

df.iloc[out_rows, :].to_csv('file_name.csv')
您需要更详细地说明您想要实现的目标,然后我们可以提供更好的帮助

编辑:

就我现在所知,您希望基于接近某些值的浮动进行选择。这可能有点老套,还假设您没有遗漏整数(根据您对值的描述,这似乎是一个合理的假设):

假设您的
df
如下所示(替换为实际数据):

如前所述,首先根据
x,

df = df.sort_values('x,')

          x,  y
1   0.602229  2
0   0.955425  1
2   1.520194  6
3   1.748095  1
5   2.051359  6
4   2.422760  0
6   3.268572  9
7   3.981412  1
9   4.215138  8
8   4.687532  0
10  5.029877  7
11  5.197888  7
13  6.452637  0
12  6.795040  1
15  7.127841  5
14  7.413032  8
17  8.002060  8
16  8.597014  7
18  9.713273  3
19  9.912318  7
df['helper'] = df['x,'].apply(np.floor).astype(int)

          x,  y  helper
1   0.602229  2       0
0   0.955425  1       0
2   1.520194  6       1
3   1.748095  1       1
5   2.051359  6       2
4   2.422760  0       2
6   3.268572  9       3
7   3.981412  1       3
9   4.215138  8       4
8   4.687532  0       4
10  5.029877  7       5
11  5.197888  7       5
13  6.452637  0       6
12  6.795040  1       6
15  7.127841  5       7
14  7.413032  8       7
17  8.002060  8       8
16  8.597014  7       8
18  9.713273  3       9
19  9.912318  7       9
然后在
floor
x,

df = df.sort_values('x,')

          x,  y
1   0.602229  2
0   0.955425  1
2   1.520194  6
3   1.748095  1
5   2.051359  6
4   2.422760  0
6   3.268572  9
7   3.981412  1
9   4.215138  8
8   4.687532  0
10  5.029877  7
11  5.197888  7
13  6.452637  0
12  6.795040  1
15  7.127841  5
14  7.413032  8
17  8.002060  8
16  8.597014  7
18  9.713273  3
19  9.912318  7
df['helper'] = df['x,'].apply(np.floor).astype(int)

          x,  y  helper
1   0.602229  2       0
0   0.955425  1       0
2   1.520194  6       1
3   1.748095  1       1
5   2.051359  6       2
4   2.422760  0       2
6   3.268572  9       3
7   3.981412  1       3
9   4.215138  8       4
8   4.687532  0       4
10  5.029877  7       5
11  5.197888  7       5
13  6.452637  0       6
12  6.795040  1       6
15  7.127841  5       7
14  7.413032  8       7
17  8.002060  8       8
16  8.597014  7       8
18  9.713273  3       9
19  9.912318  7       9
现在将重复项放入
helper

df = df.drop_duplicates('helper')

          x,  y  helper
1   0.602229  2       0
2   1.520194  6       1
5   2.051359  6       2
6   3.268572  9       3
9   4.215138  8       4
10  5.029877  7       5
13  6.452637  0       6
15  7.127841  5       7
17  8.002060  8       8
18  9.713273  3       9
并导出解决方案:

df.iloc[::5, :].drop('helper', axis=1)

          x,  y
1   0.602229  2
10  5.029877  7

使用pandas库将csv转换为数据帧的粗略示例

import pandas as pd

df = pd.read_csv('asdf.csv')
for i in range(200+1):
     df.iloc[i*5]

这是假设你想在5行中上升

你想每5行采样一次,从第一行开始,在第1000行停止,然后将其写入另一个文件?如果你的
x
列实际上是浮点数,那么你很难找到5的倍数,除非你的意思是“在1%的公差范围内”(在这种情况下,您需要指定)。(顺便说一句:我推断“可除数”恶习是“可取的”。)不管怎样,如果您再次问这个(或类似)问题,我建议您添加您实际尝试过的代码;因此,这并不意味着“为我免费编写此代码”服务,因此它有助于显示您所做的努力。它还为您预期的流程提供了进一步的背景。为什么您要包括
5.000581861276573
,而不是
5.006295444400881
?Manu!:这只是一个示例,是的,我只想包括一楼的值,它更接近5。谢谢!如果我参与了该怎么办lumn在float value中,而不是int中。@Mathi:我不明白你的问题。我以为这是关于选择行而不是列的?我假设你说的是索引;在这个上下文中,你用float来表示什么,或者我误解了什么?我的第一列值从0开始,然后通过添加0.001(类似于那样)将增长到N。在列中,我需要提取至少接近5、10、15、20等的行。我该怎么做?它不起作用,我遇到了一些错误。@Mathi:什么错误?请确保使用正确的列名…谢谢!当列值处于浮点状态时,请告诉我如何提取接近5、10、15的行。Manu!:我编辑了m现在你可以帮助我吗?谢谢!我想要这样的东西,你能告诉我当列值浮动时我该怎么做,我只需要行5, 10, 15个等等。但是你不寻找这个位置,寻找变量的值席猜我需要改变F中的那些值。第一列从float中转换为int,并将它们提取为5、10、15等等!我想准确地提取接近5、10、15、20、25等等的列值。Peach!:我现在编辑了我的问题,现在可以帮我吗。