乘以csv文件中的某些列

时间:2019-03-21 11:44:24

标签: pandas shell csv awk

我有多个大型csv文件,其中某些列在我的情况下是0,第一个列是:

1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49

应乘以-1。

我想翻转这些列的数字符号,并将所有+变为-,反之亦然。然后应保存该文件。 Linux中的Shell脚本可以做到吗?也许是awk,pandas或类似的东西?

简短示例:

-2,-4,-5, 8, 5, 7

应该是

2, 4 ,5, -8,-5,-7

编辑:到目前为止,我的努力

import pandas as pd

myfile = open("anyfile.csv")
df = pd.read_csv(myfile, header=None)

#print(df, end="\n\n")

df[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49] *= -1

#print(df)

如何将结果保存到新的csv中。是否可以通过shellscript自动执行此操作?

3 个答案:

答案 0 :(得分:3)

能否请您尝试以下。我正在考虑您要更改所有列的符号,并且要以逗号分隔符格式输出。

awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){$i=$i*-1}} 1'  Input_file

OR(根据詹姆斯爵士先生的好建议):

awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){$i=-$i}}} 1'  Input_file

答案 1 :(得分:3)

使用awk:

READ ONLY

位置:

  • 将列号列表指定为awk中的变量columns="1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49" awk -v f="$columns" ' BEGIN{ FS=OFS=","; n=split(f,cols,",") } { for(i=1; i<=n; i++) $(cols[i]+1)=-1*$(cols[i]+1) }1 ' file.csv ,然后将其拆分为名为f的数组
  • 然后,您可以遍历此数组并通过cols查找列号,然后进行数学运算。

我假设所有列都是数字,并且在字段中没有嵌入$(cols[i]+1)

答案 2 :(得分:0)

始终添加-并删除--。处理空格。

echo "-2,-4,-5, 8, 5, 7" | sed -r 's/ //g;s/(^|,)/& -/g;s/--//g;s/^ //'