Python 如何从.csv文件中提取特定行并写入另一个文件
我有类似以下内容的.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
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!:我现在编辑了我的问题,现在可以帮我吗。