我有一个结构如下的csv:
use warnings;
use strict;
use feature 'say';
my ($ref_file, $data_file) = @ARGV;
die "Usage: $0 ref-file data-file\n" if not $ref_file or not $data_file;
open my $fh, '<', $ref_file or die "Can't open $ref_file: $!";
my %rows;
while (<$fh>) {
my (undef, $idx, $row_id) = split;
for (split /,/, $row_id) {
push @{$rows{$_}}, $idx; # elem => [ indices ]
}
}
my $outfile = 'new_' . $data_file;
open $fh, '<', $data_file or die "Can't open $data_file: $!";
open my $fh_out, '>', $outfile or die "Can't open $outfile: $!";
my @ref = split ' ', <$fh>;
shift @ref; # toss the first field
while (<$fh>) {
my ($row_id, @data) = split;
if (exists $rows{$row_id}) { # this row needs attention
my @new_row = @ref;
foreach my $idx (@{$rows{$row_id}}) { # keep data at these indices
$new_row[$idx] = $data[$idx];
}
say $fh_out join "\t", $row_id, @new_row;
}
else { # use whole reference line
say $fh_out join "\t", $row_id, @ref;
}
}
我正在尝试从“栏”列中提取值,但我得到的只是“ bloop”。
这是我要拉“需要”的方式:
_________________________
|foo | bar | | |
| |need |bleep|bloop|
| |this |bleep|bloop|
我无法弄清楚为什么我只得到“ bloop”而不是“ need”。我也尝试过使用:
df = pd.read_csv('PATH\TO\FILE')
value = df.iloc[1]['bar']
print(value)
>bloop
获取第二列,但无济于事。
编辑:这是前几条csv行的格式,由于敏感信息而不得不更改。
df.iloc[:,1]
答案 0 :(得分:3)
问题是标题行没有足够的字段。因此,pandas
假设前两列是索引,并为您提供两列foo
和bar
,这使它可以正确地分析文件并避免这种情况错误:
df = pd.read_csv('test.csv', header=None)
ParserError:标记数据时出错。 C错误:行中应有2个字段 2,看到了4
由于更改基础数据有时很麻烦,因此只需跳过第一行并手动设置列名即可。
df = pd.read_csv('test.csv', skiprows=1)
df.columns=['foo', 'bar', 0, 1]
foo bar 0 1
0 NaN need some stuff, and, more, other, blah stuff, stuff bloop
1 NaN need pretty, much, the, same stuff bloop
答案 1 :(得分:1)
打开您的CSV文件。从以下位置更改标题:
foo,bar
收件人:
foo,bar,,
然后重新运行代码。