我有一个看起来像这样的数据框:
123 345 456 789
987 876 765 543
... ... ... ...
但是最上面一行和最左边一列实际上是值时,它们被当作标题。无论如何,是否可以将它们向下/向右移动并将其替换为默认索引?
编辑:我已经考虑过设置header = None,但这不是一个选择。数据帧是通过read_excel创建的,但是程序的许多部分已经使用.loc等,并且直接引用要删除的标头名称。
答案 0 :(得分:3)
对于您的解决方案,您只需进行调整即可。但是,如果您要从任何csv文件中读取数据,则在读取时可以考虑不采用header(header = None)
while (managedCursor.moveToNext()) {
String callDate = managedCursor.getString(date);
Date callDayTime = new Date(Long.valueOf(callDate));
if (<compare callDayTime with a "Date" of one week ago> ){
String phNumber = managedCursor.getString(number);
if (<phNumber is equal to the desired Phone>) {
if(Integer.parseInt(callType) == CallLog.Calls.OUTGOING_TYPE){
// User called the phone number last week
}
}
}
}
出局:
345 456 789
123
987 876 765 543
df.reset_index().T.reset_index().T
出局:
0 1 2 3
index 123 345 456 789
0 987 876 765 543
pd.read_csv('data.csv',header=None)
答案 1 :(得分:1)
使用参数cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(TokenEngine VERSION 0.0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_FILES src/Application.cpp src/Application.hpp src/EntryPoint.hpp src/Logger.cpp src/Logger.hpp)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/")
add_library(TokenEngine SHARED ${SOURCE_FILES})
#Expose the public API of the engine to any project that might use it
target_include_directories(TokenEngine PUBLIC include)
,默认情况下,第一行转换为列名,因此不需要任何参数:
#include <iostream>
#include <fstream>
using namespace std;
struct arrayelement {
char protein[30];
int count;
};
arrayelement proteins[40];
int main()
{
char buffer[30];
// open source file
ifstream fin("proteins.txt");
if (!fin) { cerr << "Input file could not be opened\n"; exit(1); }
// loop through strings in file
while (fin >> buffer) {
int index = ((buffer[0] - 65) + (2 * (buffer[strlen(buffer)-1] - 65)) % 40);
while (true)
{
if (proteins[index].protein == buffer) // Found
{
proteins[index].count++;
break;
}
if (proteins[index].protein[0] == 0) // Empty
{
strcpy(proteins[index].protein, buffer); // <-- The error in question
proteins[index].count++;
break;
}
index++; // Collision
}
}
// close file
fin.close();
for (int i = 0; i <= 40; i++)
{
cout << proteins[i].protein << "\t" << proteins[i].count << "\n";
}
}
如果输入数据是没有标题的DataFrame:
index_col=[0]
如果可能在数据中使用相同类型的值,则将import pandas as pd
temp=u"""123;345;456;789
987;876;765;543"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=";", index_col=[0])
print (df)
345 456 789
123
987 876 765 543
与索引一起使用:
print (df)
0 1 2 3
0 123 345 456 789
1 987 876 765 543
#set first row to columns
df.columns = df.iloc[0]
#remove first row from data and remove columns name
df = df.iloc[1:].rename_axis(None, axis=1)
#set index by first column
df = df.set_index(df.columns[0])
print (df)
345 456 789
123
987 876 765 543
答案 2 :(得分:0)
创建数据框似乎存在问题。如何创建数据框?您很有可能可以通过创建解决问题
但是,如果不是这样,请尝试以下操作:
pandas.DataFrame.reset_index()
是您想要的。至于列名,只需使用pandas.DataFrame.append()
和df.columns
作为参数(其中df
是您的数据帧)将它们添加为常规行,然后在其后重命名列即可。