GVKun编程网logo

熊猫的CSV写入-附加与写入

27

在这篇文章中,我们将带领您了解熊猫的CSV写入-附加与写入的全貌,同时,我们还将为您介绍有关C++文件读取与写入、csv.write写入csv时跳过行、CSV写入HDFS、CSV文件中的分组方式和不含

在这篇文章中,我们将带领您了解熊猫的CSV写入-附加与写入的全貌,同时,我们还将为您介绍有关C++文件读取与写入、csv.write写入csv时跳过行、CSV写入HDFS、CSV文件中的分组方式和不含熊猫的平均值的知识,以帮助您更好地理解这个主题。

本文目录一览:

熊猫的CSV写入-附加与写入

熊猫的CSV写入-附加与写入

如果“文件名”不存在,我想使用pd.write_csv写入“文件名”(带有标题),否则,如果存在“文件名”,则附加到文件名中。如果我只使用命令:

     df.to_csv(''filename.csv'',mode = ''a'',header =''column_names'')

写入或追加成功,但似乎每次进行追加时都会写入标头。

如果文件不存在,如何只添加标题,如果文件存在,如何不添加标题而追加标题?

答案1

小编典典

不确定熊猫是否有办法,但是检查文件是否存在将是一种简单的方法:

import os# if file does not exist write header if not os.path.isfile(''filename.csv''):   df.to_csv(''filename.csv'', header=''column_names'')else: # else it exists so append without writing the header   df.to_csv(''filename.csv'', mode=''a'', header=False)

C++文件读取与写入

C++文件读取与写入

头文件

fstream  // 文件流
ifstream  // 输入文件流
ofstream  // 输出文件流

文件打开方式

ios::app:以追加的方式打开文件
ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary:以二进制方式打开文件,缺省的方式是文本方式
ios::in:文件以输入方式打开(文件数据输入到内存)
ios::out:文件以输出方式打开(内存数据输出到文件)
ios::nocreate:不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc:如果文件存在,把文件长度设为0

文件写入(不追加,覆盖原文件)

    //1、创建流对象
	fstream fs; //可输入输出
	//2、指定打开方式
	fs.open("test_A.txt", ios::out);
	//3、文件写入
	fs<<"abc"<<123;
	fs.close();

2、文件写入(追加,在原文件末尾写入)

    //1、创建流对象
	fstream fs; //可输入输出
	//2、指定打开方式
	fs.open("test_A.txt", ios::out|ios::app);
	//3、文件写入
	fs<<"abc"<<123;
	fs.close();

3、文件读取

    //1、创建流对象
	fstream fs; //可输入输出
	//2、指定打开方式
	fs.open("test_A.txt", ios::in);
	//3、文件读取(前面是字符串,后面是数字)
	String s; 
	int num;
	while(fs>>s>>num) //文件读取至末尾
	{
	    cout<<s<<"  "<<num<<endl;
	}
	fs.close();

4、文件读取(按行读取)

    //1、创建流对象
	fstream fs; //可输入输出
	//2、指定打开方式
	fs.open("test_A.txt", ios::in);
	//3、文件读取(前面是字符串,后面是数字)
	String line;
	while(getline(fs, line)) //文件读取一行,并按分隔符进行处理
	{
	    //"123,456,789"
	    int i1 = line.find(",");
		int i2 = line.find(",",len1+1);
		String s1 = line.substr(0,i1);
		String s2 = line.substr(i1+1,i2-i1-1);
		String s3 = line.substr(i2+1);
		//字符串转数字
		double d1 = my_atod(s1);
		double d2 = my_atod(s2);
		double d3 = my_atod(s3);
		cout<<d1<<"  "<<d2<<"  "<<d3<<endl;
	}
	fs.close();

    //包含头文件 #include<sstream>
	double my_atod(string tempString)
	{
	    double result;
	    stringstream ss;
	    ss << tempString;
	    ss >> result;
	    return result;
	}

csv.write写入csv时跳过行

csv.write写入csv时跳过行

我正在尝试通过以下方式写入csv文件

file = open(''P:\test.csv'', ''a'')fieldnames = (''ItemID'', ''Factor'', ''FixedAmount'')wr = csv.DictWriter(file, fieldnames=fieldnames)headers = dict((n, n) for n in fieldnames)wr.writerow(headers)wr.writerow({''ItemID'':1, ''Factor'': 2, ''FixedAmount'':3})

但是,当我查看csv文件时,第一行为空,第二行为我的标题,第三行再次为空,第四行显示条目1,2和3。为什么>跳过前一行它使一个条目?

编辑:使用python 3.2

答案1

小编典典

解决方案是在构造函数中指定“ lineterminator”参数:

file = open(''P:\test.csv'', ''w'')fields = (''ItemID'', ''Factor'', ''FixedAmount'')wr = csv.DictWriter(file, fieldnames=fields, lineterminator = ''\n'')wr.writeheader()wr.writerow({''ItemID'':1, ''Factor'': 2, ''FixedAmount'':3})file.close()

CSV写入HDFS

CSV写入HDFS

http接到的数据能够直接写入到远程hdfs么

CSV文件中的分组方式和不含熊猫的平均值

CSV文件中的分组方式和不含熊猫的平均值

以下是使用基本工具的惯用用法(因此具有最佳的可读性,最少的错误和最佳的cpu / mem性能):

from itertools import groupby

def get_avg(vs):
    sum_vs = 0
    num_vs = 0
    for v in vs:
        sum_vs += v
        num_vs += 1
    return sum_vs / num_vs

def group_by(rows,key):
    return groupby(sorted(rows,key=key),key=key)

rows = csv.reader(decoded_content.splitlines(),delimiter=',')

for country,rows in group_by(rows,lambda row: row[0]):
    print(country,get_avg(float(row[1]) for row in rows))

您将sorteditertools.groupby与相同的lambda一起使用,可以方便地为您分组行。

,

这样对您有用吗? data包含您刚刚排序的列表。

data = [['country','population'],['Usa','1273'],'4343'],'1240'],['Uk','7879'],'3224'],'4342'],['Tr','6565'],'7889'],'1980']]

temp = {}

for i in range(1,len(data)):
    if data[i][0] not in temp.keys():
        temp[data[i][0]] = {
                "sum": int(data[i][1]),"count": 1
                }
    else:
        temp[data[i][0]]["sum"] += int(data[i][1])
        temp[data[i][0]]["count"] += 1

out = [["country","avgPop"]]

for key in temp.keys():
    avg = int(temp[key]["sum"] / temp[key]["count"])
    out.append([key,avg])

print(out)

输出:

[['country','avgPop'],2285],5148],5478]]
,

我相信这完全符合您的要求:

import csv

index = {}
with open('/tmp/data.csv') as f:
    cr = csv.reader(f)
    next(cr) # skip header row
    for row in cr:
        index.setdefault(row[0],[]).append(int(row[1]))

print("['country','avgPop']")
for c,v in index.items():
    print("['{}','{}']".format(c,int(sum(v) / len(v))))

输入CSV文件:

country,population
Usa,1273
Usa,4343
Usa,1240
Uk,7879
Uk,3224
Uk,4342
Tr,6565
Tr,7889
Tr,1980

结果:

['country','avgPop']
['Usa','2285']
['Uk','5148']
['Tr','5478']

我们今天的关于熊猫的CSV写入-附加与写入的分享已经告一段落,感谢您的关注,如果您想了解更多关于C++文件读取与写入、csv.write写入csv时跳过行、CSV写入HDFS、CSV文件中的分组方式和不含熊猫的平均值的相关信息,请在本站查询。

本文标签: