在这篇文章中,我们将带领您了解熊猫的CSV写入-附加与写入的全貌,同时,我们还将为您介绍有关C++文件读取与写入、csv.write写入csv时跳过行、CSV写入HDFS、CSV文件中的分组方式和不含
在这篇文章中,我们将带领您了解熊猫的CSV写入-附加与写入的全貌,同时,我们还将为您介绍有关C++文件读取与写入、csv.write写入csv时跳过行、CSV写入HDFS、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++文件读取与写入
头文件
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文件
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
http接到的数据能够直接写入到远程hdfs么
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))
您将sorted
和itertools.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文件中的分组方式和不含熊猫的平均值的相关信息,请在本站查询。
本文标签: