我的.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
现在我想写出列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分割。
我的输出应如下所示:
5.000581861276573, 6.234
10.00211537343025, 1.232
不是5,10等值的两倍。提取一个5值后, 它应该被5整除,在这种情况下它应该是10.
答案 0 :(得分:2)
如果你想写出每个第5行,你可以简单地做
df.iloc[::5, :].to_csv('file_name.csv')
其中df
是像这样创建的pandas数据框:
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')
您需要更详细地说明您想要达到的目标,然后我们可以提供更好的帮助。
编辑:
据我所知,您希望根据接近某些值的浮点数进行选择。这可能有点hacky并且还假设您不会遗漏整数(这似乎是基于您对值的描述的合理假设):
假设您的df
看起来像这样(替换为实际数据):
x, y
0 0.955425 1
1 0.602229 2
2 1.520194 6
3 1.748095 1
4 2.422760 0
5 2.051359 6
6 3.268572 9
7 3.981412 1
8 4.687532 0
9 4.215138 8
10 5.029877 7
11 5.197888 7
12 6.795040 1
13 6.452637 0
14 7.413032 8
15 7.127841 5
16 8.597014 7
17 8.002060 8
18 9.713273 3
19 9.912318 7
如上所述,首先根据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
然后添加一个帮助列,floor
x,
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
答案 1 :(得分:0)
您的答案非常广泛,需要更多解释。它也可能已在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)
这只是将您在to_print
中指定的每一行写入另一个csv文件。
如果您要打印0到1000之间的每隔五行,您可以考虑设置to_print = range(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)
答案 2 :(得分:0)
archive_in = open('lines.txt', 'r')
archive_out = open('out.txt', 'w')
i = 0
for line in archive_in.readlines():
i += 1
if i == 2:
archive_out.write(line)
i = 3
elif i == 7:
archive_out.write(line)
i = 2
archive_in.close()
archive_out.close()
编辑,现在写入具有最接近值的行来列出输入。
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()
答案 3 :(得分:0)
使用pandas库的粗略示例,该库将csv转换为数据帧。
import pandas as pd
df = pd.read_csv('asdf.csv')
for i in range(200+1):
df.iloc[i*5]
这假设你想要进入5的